티스토리 뷰

이 글에서는 C#에서 선언할 수 있는 명시적선언과 암시적선언에 대해서 알아보도록 하겠습니다. 명시적선언은 Explicit라는 용어를 많이들 쓰고, 암시적선언은 Implicit라는 말을 많이 씁니다.


이 두가지 선언 방법의 차이는 바로 변수 선언시 타입을 같이 선언하느냐 하지 않느냐인데요. 

  • Explicit : 변수의 타입을 지정하지 않고 var라는 타입을 통해서 선언합니다.
  • Implicit : 변수의 타입을 지정해야 합니다.




.NET에서 또한 Explicit와 Implicit 모두 지원을 하고 있습니다.

간단히 int형의 데이터 타입 변수를 선언하고자 한다면 사용자는 아래와 같이 변수를 선언할 수 있습니다.


int i = 0; //명시적 선언(Explicit)


하지만 var라는 명령어를 통해서도 C#에서는 변수 선언이 가능합니다.

var를 이용하게 되면 컴파일러는 선언시에 할당되는 데이터를 보고 데이터 타입을 컴파일 타임에서 결정을 합니다. 


암시적 선언 방식은 아래의 코드와 같습니다.


var v = 0; //암시적 선언(implicit)


위의 코드에서 우리는 v라는 변수에 0을 할당하였습니다. IL 코드가 생성이 될 때 var라는 데이터 타입은 int 타입으로 변형이 됩니다. 

var는 컴파일 타임시에 데이터타입을 결정을 합니다. 따라서 var로 선언된 변수에 null이라는 object의 빈 값을 넣을 수 없습니다. 



그 이유는 어떠한 데이터형인지 알 수 없기 때문이죠.


Var는 무엇인가?


var는 .NET 프레임워크 3.0버전에서 새로이 나온 개념으로, 닷넷이 사용할 수 있는 대부분의 데이터 타입을 사용할 수가 있습니다. 위에서 말한 것과 같이 .NET 프레임워크 환경에서도 암시적타입 선언이 가능하게 된것이죠. 이는 익명 타입(Anonymous Type)을 위해서 추가적으로 지원이 되게끔 만들었다고 볼 수 있습니다. 


왜 Var를 사용해야 하는가?


var가 필요한 가장 큰 이유는 익명 타입(Anonymous Type)가 함께 LINQ를 사용할 때 필요합니다. var 타입은 사용자가 개발하는 코드를 간단하고 빠르게 만들게 도움을 줍니다.



LINQ의 예를 통해서 살펴보도록 합시다.


using System;  

using System.Collections.Generic;  

using System.Linq;  

namespace ConsoleApplication1  

{  

    class Details  

    {  

        public int Length;  

        public string Value;  

    }  


    class LINQ  

    {  

        static void Main(string[] args)  

        {  

            string[] Names = {  

                "영수", "철수", "영희"  

            };  


            IEnumerable < Details > details = from x in Names select new Details  

            {  

                Length = x.Length, Value = x  

            };  


            foreach(Details d in details)  

            {  

                Console.Write(string.Format("Name : {0}, Length : {1}\n", d.Value, d.Length));  

            }  


            System.Threading.Thread.Sleep(2000);  

        }  

    }  

}  


위의 코드는 LINQ 쿼리를 통해서 받을 Details라는 테이터 타입을 만들었습니다. 이 코드의 가장 큰 문제는 코드의 길이가 길어지고, 클래스를 만들어야 한다는 점이죠.


또한 IEnumerable 인터페이스를 사용해야 합니다. 

하지만 위의 코드를 var 타입으로 사용하게 되면 아래와 같이 코드가 간결해 집니다.


using System;  

using System.Collections.Generic;  

using System.Linq;  

namespace ConsoleApplication1  

{  

    class LINQ  

    {  

        static void Main(string[] args)  

        {  

            string[] Names = {  

                "영수", "철수", "영희" 

            };  


            var v = from x in Names select new  

            {  

                Length = x.Length, Value = x  

            };  


            foreach(var d in v)  

            {  

                Console.Write(string.Format("Name : {0}, Length : {1}\n", d.Value, d.Length));  

            }  


            System.Threading.Thread.Sleep(2000);  

        }  

    }  

}


그럼 이만 줄이겠습니다.

열공하세요.


이 글이 도움이 되셨으면, 아래의 하트를 눌러주세요.


댓글