더북(TheBook)

50.4 확장 메서드와 dynamic

확장 메서드는 정적 형식에서는 제대로 호출되지만, 동적 형식에서는 호출되지 않습니다.

동적 형식에서는 확장 메서드가 호출되지 않음: DynamicExtensionMethod.cs

using System;

static class DynamicExtensionMethod
{
    //확장 메서드
    static string PreDotNet(this string str) => $"....{str}";

    static void Main()
    {
        string s1 = "DotNet";
        Console.WriteLine(s1.PreDotNet()); //① 실행됨

        dynamic d1 = "Korea";
        Console.WriteLine(d1.PreDotNet()); //② 에러 발생
    }
}

실행 결과

....DotNet

처리되지 않은 예외: Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: 'string'에 'PreDotNet'에 대한 정의가 없습니다.
    위치: CallSite.Target(Closure , CallSite , Object )
    위치: System.Dynamic.UpdateDelegates.UpdateAndExecute1[T0,TRet](CallSite site, T0 arg0)
    위치: DynamicExtensionMethod.Main() 파일 C:\DotNet\DotNet\DotNet\DotNet\52_Dynamic\DynamicExtensionMethod\DynamicExtensionMethod.cs:줄 14

C#에서는 dynamic 키워드를 사용하여 동적 형식을 만들 수 있습니다. 하지만 C#으로만 개발할 때는 강력한 형식이 좋습니다. 동적인 언어와 호환 프로그램을 작성한다든지 웹을 개발할 때 MVC 패턴처럼 컨트롤러에서 뷰로 서로 다른 계층으로 데이터를 전송하는 등 상황에서는 동적 형식을 사용하면 좀 더 편리하게 코드를 작성할 수 있습니다.

오랜 기간 C#을 사용해 왔지만, 학습을 시작하는 일반적인 경우에는 dynamic 형식을 많이 사용하지 않기에 간단히 예제 몇 개만 살펴보는 식으로 마무리했습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.