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