dynamic은 언뜻 var와 비슷해 보이지만
dynamic d = 10;
int sum = 10 + d;
Console.WriteLine(sum);
var는 초기값의 타입에 따라 변수의 타입이 결정되지만 dynamic은 프로그램이 실행될때 타입이 결정됩니다. 따라서 다음과 같은 구현도 컴파일시에는 오류를 일으키지 않고 컴파일이 진행될 수 있습니다.
dynamic d = 10;
d.callMethod();
물론 실제 d에는 callMethod 라는 메서드가 정의되어 있지 않기에 프로그램이 실행되면 오류가 발생하게 될 것입니다.
dynamic이 생김으로 인해서 가능한것 중 하나는 덕 타이핑(duck typing)이라는 것입니다. 예를 들어 서로 다른 클래스에서 동일한 메서드를 호출할때 사용가능한 방법중 하나로 우선 공통된 메서드를 만들어
class myClass1
{
public void classMessage()
{
Console.WriteLine("클래스1");
}
}
class myClass2
{
public void classMessage()
{
Console.WriteLine("클래스2");
}
}
다음과 같이 인터페이스를 구현하고
interface IClassMethod
{
void classMessage();
}
class myClass1 : IClassMethod
{
public void classMessage()
{
Console.WriteLine("클래스1");
}
}
class myClass2 : IClassMethod
{
public void classMessage()
{
Console.WriteLine("클래스2");
}
}
해당 인터페이스를 이용해 메서드를 호출하는 방법이 사용될 수 있습니다.
static void Main(string[] args)
{
classMethod(new myClass1());
Console.Read();
}
static void classMethod(IClassMethod cm)
{
cm.classMessage();
}
하지만 dynanmic을 이용하면 중간에 인터페이스를 끼우는 과정을 생략할 수 있습니다.
static void Main(string[] args)
{
classMethod(new myClass1());
Console.Read();
}
static void classMethod(dynamic d)
{
d.classMessage();
}
출처: http://lab.cliel.com/entry/C-dynamic?category=478966 [CLIEL LAB]
문자열 보간($) (0) | 2018.06.29 |
---|---|
nameof (0) | 2018.06.29 |
BigInteger (0) | 2018.06.29 |
Task (0) | 2018.06.29 |
GZipStream - 문자열 압축과 해제 (0) | 2018.06.29 |