C# 4.0 Quick Look – dynamic 키워드

C#을 제 포트폴리오상의 주력 프로그래밍 언어로 삼은지 벌써 수 년이 지났고 어느덧 C#의 네 번째 버전이 베일을 벗고 있습니다. C#을 처음 접할 때만 하더라도 Cava 라는 웃지 못할 별명 (C + Java)이 꼬리표처럼 따라 다녔지만 이제는 C#은 Java와 다르다는 것을 증명해 나가고 있고 C# 3.0 이후로는 더 이상 Cava라는 이름이 따라다니는 불행이 없다는 것이 참 좋았습니다. 🙂


이번 C# 4.0에서는, 제가 이전에 C# 3.0에서 우려했던 var 키워드의 모습을 실제로 구현하는 dynamic 키워드가 등장합니다. var 키워드가 컴파일 타임에서의 유추에 의존하는 것이면 dynamic 키워드는 예전의 Variant 키워드를 연상하게 하는 내용입니다. 하지만 예전에 스크립트 프로그래밍을 구현하던 때와는 중요한 차이점이 있는데, 바로 Reflection의 유무입니다.


Reflection이 없었을 때의 Duck Typing은 사치의 절정이었습니다. 메모리 소모량도 크고 불안정하기까지 했으니까요. 하지만 .NET Framework가 제시하는 Duck Typing은 개념이 많이 다른데, 그 기반에는 Reflection과 DLR (Dynamic Language Runtime)이 저변에 있습니다.


DLR은 이미 Iron 시리즈 (IronPython, IronRuby 등)에서 핵심 엔진으로 채택하여 사용 중인 Microsoft의 스크립트 언어용 런타임입니다. C# 4.0은 DLR에 대한 호환성을 높일 목적으로 dynamic 키워드를 이들 스크립트 언어에서 사용하는 것과 같은 의도로 사용할 수 있게 해줍니다. 다음의 예를 보기로 하겠습니다.


dynamic calc = GetCalculator();
int sum = calc.Add(10, 20);


object calc = GetCalculator();
Type calcType = calc.GetType();
object res = calcType.InvokeMember(“Add”, BindingFlags.InvokeMethod, null, new object[] { 10, 20 });
int sum = Convert.ToInt32(res);


단정을 하고 본다면 위의 코드에서 calc는 object 형식과 다르지 않으며, 컴파일러 수준에서 두 번째 단락의 코드처럼 Reflection으로 Add 메서드를 찾아내고 동적 파라미터로 10과 20을 배열로 구성하여 호출한 결과를 다시 가져온 것입니다. 하지만 언어의 확장과 DLR이 미리 제공하는 인터페이스인 IDynamicObject 인터페이스를 구현하여 목적에 맞고 좀 더 빠르게 동작하도록 확장할 수 있습니다.


특히 주목해야 할 것은 IDynamicObject 인터페이스를 이용하여 기존의 COM Interop 프로그래밍은 형 변환 작업 없이, 오버헤드 없이 손쉽게 프로그래밍을 할 수 있게 됩니다. C# 이야기는 아니지만 이러한 수혜를 바탕으로 Visual Basic .NET의 차기 버전도 더욱 향상된 Lazy-Binding 프로그래밍 기술을 가지게 될 것으로 봅니다.


요약하면, 이번 C# 4.0은 동적 프로그래밍 언어로서의 면모를 갖추는 본격적인 단계로 정의내릴 수 있습니다. 다음 Article에서는 C# 4.0이 가지는 또 다른 파격적인 변화 하나를 소개하겠습니다.


참고: http://blogs.msdn.com/bkchung/archive/2008/11/09/c-4-0-2008-10-ctp.aspx

C# 4.0 Quick Look – dynamic 키워드”에 대한 2개의 생각

댓글 남기기