현 블로그는 모바일 환경이 아닌 PC환경에 최적화 되어있습니다.

 Mir의 운영환경

 본체

 DeskTop

 O S

 Windows XP Professional Version 2002 Service Pack 2

 Application

 VisualStudio2008 (Ver.9.0.21022.8)

 .Net

 Framework Ver 3.0

var (Implicitly Typed Local Variables)


LINQ를 배우기 앞서 .Net Framework 3.0에서 추가된 기능 var (Implicitly Typed Local Variables)를 배워보자.

(MSDN참조 : https://msdn.microsoft.com/ko-kr/library/bb384061.aspx)

 

필자는 보통 .Net Framework 2.0이나 .Net compact framework 2.0을 많이 사용했습니다. (초기에 임베디드PC 프로그램을 많이 만들어서..)

얼마전 프로젝트에서 .Net 4.5로 작업을 하였는데 다른분들 코드를 보니 정말 신세계더군요. 

특히 LINQ의 위대함에 대해 많이 깨우쳤습니다.

아직 필자도 잘 사용하지 못하지만 이제부터라도 하나하나 짚어 가면서 배울려고 합니다.

우선 LINQ에 들어가기 앞서 .Net 3.0에 추가된 기능부터 하나하나 정리하겠습니다. (추가된 기능이 거진 LINQ에서 사용됩니다.)

 

var란?

영어로 Implicitly Typed Local Variables MSDN 한국어 버전에서는 암시적으로 형식화된 지역변수라고 번역되어있습니다.

기능을 간단하게 말하면 지역변수를 선언할때 int, string, double등등 각종 형식대신 var 하나로 모든 형식을 대체 할수 있는 기능입니다.

        public void varTest(int nTemp, string sTemp)
        {
            var a = 0;                  //Int형으로 자동 변환
            var b = "Test";             //String형으로 자동 변환
            var c = new[] { 0, 1, 2 };  //int[]형으로 자동 변환
            var d = new List(); //List형으로 자동 변환
            var e = nTemp;
            var f = sTemp;

            int aa = a++;
            string bb = b.ToUpper();
            int cc = c[1];
            d.Add("Test");
            int ee = e + 5;
            string ff = f.Substring(0, 1);
        }

위 코드를 보시면 var b라고 선언후 문자열을 대입시키기만 해도 아래에서 string에 관련된 모든 기능을 사용할수 있는걸 확인할수 있습니다.

 

어떻게 이런 기능이 실행되는지 살펴보니 컴파일러(Visual Studio)에서 var를 선언할때 코드를 분석해서 해당 Data Type을 추측하게 됩니다.

추측이 성공하기 위한 두가지 조건이 있는데

1. var 선언시 초기화를 꼭 해줘야합니다. 

2. null값으로 초기화는 불가능 합니다.

두가지 조건중 하나라도 만족시키지 못할경우 빌드시 에러가 나게 됩니다.

두가지 조건을 만족시켜 추측이 완료되면 코딩도중 바로바로 적용이 되어 편하게 사용할수 있습니다.

(예외적으로 파라미터로 받은 변수를 이용하여 var를 초기화 시키면 null값이 들어가기도 합니다.)

 

확인해본 결과 이 기능은 Visual Studio 2008 버전 이상부터 .Net Framework 버전과 상관없이 쓸수 있습니다.

Framework에 속해져있는 Library가 아니라 Visual Studio(컴파일러)의 신기능입니다.

(위에서 말했듯이 컴파일러가 추측을 하는것이니 컴파일러의 기능이 당연합니다.

3.0의 신규기능이라고 말하는 이유는 Framework 3.0이 출시될때 Visual Studio 2008이 출시되었기때문입니다.)

 

조금더 다양한 활용방법을 생각해보면 아래와 같이 for, foeach, using등에서도 사용할수 있습니다.

for (var x = 1; x < 10; x++) {....}    //for문 var는 int형으로 자동 변환
foreach (var item in list) {....}      //foreach문 var는 list형으로 자동 변환
using (var file = new StreamReader(@"C:\test.txt")) {....} //using문 var는 Streamreader형으로 자동 변환

한가지 단점으로는 var를 너무 사용하면 다른 개발자가 보고 코드를 이해하는데 더욱 어려워 질수도 있다는 것입니다.

(MSDN 말씀이지만 전 자주 사용할꺼 같습니다. ㅋ)

 

후에 LINQ 쿼리식에서 자주 사용된다고 하니 기억해두시면 좋을꺼 같습니다.

 


Tip. 아래는 MSDN에 나와있는 var의 잘못된 선언문의 예입니다.

  var x;               // 오류.형식 유추에 사용하는 이니셜라이저가 없다.
  var y = {1, 2, 3};   // 오류.컬렉션 이니셜라이저는 허가되지 않다.
  var z = null;        // 오류.null 형은 허가되지 않다.
  var u = x => x + 1;  // 오류.lambda 식으로 형식이 지정되지 않다.
  var v = v++;         // 오류.변수 자체를 이니셜라이저로 참조할 수 없다.

※ 관련글

[C#/.Net][Framework 3.0 신규 기능(1)] Implicitly Typed Local Variables (암시적으로 형식화된 지역변수)

[C#/.Net][Framework 3.0 신규 기능(2)] Extension Methods (확장 메소드)

+ Recent posts