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 형식을 많이 사용하지 않기에 간단히 예제 몇 개만 살펴보는 식으로 마무리했습니다.

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