Programming/.NET

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();
}

'Programming > .NET' 카테고리의 다른 글

[C#] BigInteger  (0) 2017.10.24
[ASP.NET MVC] 다중 모델 사용하기 (Tuple)  (0) 2017.10.18
[C#] dynamic 과 덕 타이핑(duck typing)  (0) 2017.10.10
[C#] 컬렉션 초기화  (0) 2017.09.26
[ASP.NET MVC] 유효성 확인 - 2  (0) 2017.09.20
[ASP.NET MVC] 유효성 확인 - 1  (0) 2017.09.15
0 0