티스토리 뷰

안녕하세요. 구스입니다.


오랜만에 C# 강좌 글을 남기네요. 이 글에서 C# Var와 Dynamic(다이나믹)에 대한 소개를 해드릴까 합니다. 


C# var는 Visual Studio 2008, .NET Framework 3.5 버전에서 나왔고, Dynamic(다이나믹)은 Visual Studio 2010, .NET Framework 4.0 버전에서 소개가 되었습니다.


C# Var란 무엇일까요?


Var는 데이터 타입을 개발자가 아닌 컴파일러가 결정하게 끔 만드는 키워드(Keyword)입니다. 일반적으로 C#에서는 int, double, string, float와 같이 개발자가 사용하고자는 데이터 타입을 결정하게 됩니다. 이를 명시적 선언이라고 이야기 합니다. 


하지만 데이터 타입이 임의적으로 타입이 변경이 되는 코드를 짜고 싶다면 어떻게 해야 할까요. 위에서 언급한 명시적선언으로 처리를 원치 않는 경우에는 Var 타입을 사용할 수 있습니다. Var로 선언된 변수는 컴파일시에 데이터 타입이 결정이 되게 되는 것이죠. 


좀더 자세히 이야기 하면, Var 타입은 선언 시점에 초기화가 됩니다. 그리고 한번 초기화한 타입은 변경이 될 수 없습니다. 그리고 컴파일러가 타입을 결정할 때 에러가 발생을 하게 되면, 컴파일 시에 에러를 전달하고 아니라면 타입을 결정하여 사용하게 됩니다.


C# Var 타입을 사용하게 되면 아래와 같이 name은 string 형으로 초기화 되었고, 초기화 이후 다른 타입으로 변경을 할 수는 없습니다. 






아래의 예제와 같이 String으로 선언된 var 타입이 정수형(Int)로 변경이 될 수 없으며, 데이터 타입을 변경하고자 하면 컴파일러는 에러를 던지게 됩니다. 



마지막으로 C# Var 타입으로 선언된 변수에는 무조건 값을 한번 이상 넣어야 합니다. 

Var 타입이 생각보다 제약도 많고, 사용하기 편하지 않습니다. 명시적 선언만 피할려고 Var 타입을 쓰는 것은 생각보다 효율적이지 않을 수도 있습니다.


그럼 C# 다이나믹(Dynamic) 타입은 무엇일까요?


위의 Var 타입에 대한 문제를 해결해주는 것이 바로 다이나믹(Dynamic) 입니다. 


다이나믹 역시 런타임시 데이터의 타입이 결정이 되는 것입니다. 하지만 C# Var 타입보다 훨씬 유연하다고 볼 수 있습니다. 다이나믹 타입은 항상 런타임 시에 데이터 타입을 결정하게 됩니다. 


따라서 C# Dynamic은 동적으로 데이터 타입을 사용해야하는 경우 사용이 됩니다. 

C# Dynamic 타입의 예를 한번 볼까요. 


Example


using System;  

namespace ConsoleDemo {  

    public class Program {  

        public static void Main(string[] args) {  

            dynamic name; //will compile and run  

  

            name = "This is C - SharpCorner Article";  

  

            name = 101;  

  

            Console.WriteLine("The value of name is " + name);  

  

  

            Console.ReadLine();  

        }  

    }  

}  


위에서 C# Var 타입을 사용한 경우 에러가 발생을 하였으나, 위의 코드는 전혀 문제가 되지 않습니다. C# Dynamic은 런타임시에 데이터 타입을 결정하기 때문이죠. 


위의 코드를 실행하면 아래와 같은 결과를 볼 수 있습니다. 


아래의 한줄이 이번 C# 강좌의 핵심이라고 볼 수 있습니다.

Var는 데이터 타입이 변경이 안되고, Dynamic은 된다




name 변수는 마지막 값이 대입된 정수 타입으로 볼 수 있습니다.


이 글에서는 C# 강좌를 통해서 C# Var 타입과 C# Dynamic 타입에 대한 차이점을 간략히 살펴보았습니다.

그럼 이만 줄이겠습니다.


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


댓글