상세 컨텐츠

본문 제목

dynamic

C#

by 탑~! 2018. 6. 29. 14:49

본문

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]

'C#' 카테고리의 다른 글

문자열 보간($)  (0) 2018.06.29
nameof  (0) 2018.06.29
BigInteger  (0) 2018.06.29
Task  (0) 2018.06.29
GZipStream - 문자열 압축과 해제  (0) 2018.06.29

관련글 더보기