출처 : http://blog.tobegin.net/31  / Writer by 정은성

 

 회차
[C# 4.0] New Features in C# : 01. C# Programing Trend
[C# 4.0] New Features in C# : 02. C# 4.0 Overview
[C# 4.0] New Features in C# : 03. Dynamically Typed Objects #1 : DLR
[C# 4.0] New Features in C# : 04. Dynamically Typed Objects #2 : Dynamic Lookup
[C# 4.0] New Features in C# : 05. Optional and Named Parameters
[C# 4.0] New Features in C# : 06. Com-specific interop features
[C# 4.0] New Features in C# : 07. Covariance and Contravariance


03| Dynamic 유형 객체 #1 : DLR


구독자 여러분 안녕하세요 생각보다 포스팅이 많이 늦어졌죠?
최근에 처리할일이 생각보다 많아서 포스팅을 쓸 여력이 되지 않았습니다.
앞으로 열심히 쓰고자 하니깐 용서해주세요 ~ 흑흑...

오늘은 지난 시간에 이어서 C#의 새로운 기능에 대해 소개를 할텐데요.
그 첫번째 시간으로 동적 타입에 대해 소개를 하고자 합니다.

지난 Microsoft는 MIX07과 PDC2008 등을 통해 .NET에서 새로운 수준의 지원을 발표를 하였습니다.
바로 .NET 프레임워크에서 서로 다른 프로그래밍 언어를 광범위한 지원을 하도록 설계가 되어졌는데요.

그배경에 공용언어 런타임(Common Language Runtime)의 Sandbox 보안 모델이 발전되면서 GC(Garbage Collection), JIT(just-in-time)를 더불어 공유 서비스를 제공하면서 각 다른 언어의 라이브러리를 손쉽게 가져다 쓸수 있었기에 정적인 언어와 동적인 언어를 구별하여 사용할수 있었지 않았나 생각이 듭니다.

* Sandbox(샌드 박스)
보호된 영역내에서 프로그램을 동작시키는 것으로 외부 요인에 의해 악영향이 미치는 것을 방지하는 보안 모델, ' 아이를 모래밭(샌드 박스)의 밖에서 놀지 않는다 ' 라고 하는 말이 어원이라고 알려져 있다. 이모델에서는 외부로부터 받은 프로그램을 보호된 영역, 즉, '상자'안에 가두고 나서 동작시킨다. '상자'는 다른 파일이나 프로세스로부터 격리되어 내부에서 외부를 조작하는 것은 금지 되어 있다.

어느듯 .NET Framework 4 버전의 런칭이 되면서 공용 언어 런타임(Common Language Runtime)이 2.0에서 4.0으로 업그레이드가 되었는데요. 그동안 Silverlight 1.1에서 지원을 했던 DLR(Dynamic Language Runtime)이 다시 주목을 받으면서 C# 4.0은 완전한 프로그래밍으로 초점을 맞추어 나가고 있습니다.

먼저 간단히 DLR(Dynamic Language Runtime)에 대해서 살펴 보아야 할것 같습니다.
Dynamic Language Runtime은 CLR 상단부에 위치하고 있으며 주요 구성은 다음과 같습니다.
[그림 1 : Dynamic Language Runtime Architecture ]

DLR은 3가지 주요 구성요소를 가지고 있는데요. 어떻게 동적 언어를 실행하기 위해 협력을 하는지 설명을 해드리겠습니다. 

- Expression Trees
: 트리를 사용하여 구조적 표현의 의미를 노드로 나타냅니다. 다른 언어의 모델링을 지원하기 위해 확장된 LINQ 표현식 트리를 포함하여 동적인 변수 연산이나 변수, 이름 바인딩과 제어흐름 등이 추가 되어 DLR의 중추 역활을 담당합니다.

  표현 트리식에 대해서 궁금하시면 아래 URL을 참고 해주세요 
  표현 트리식 : 
http://msdn.microsoft.com/ko-kr/library/bb397951.aspx

- Dynamic Dispatch 
: DLR에서는 동적 개체 및 작업을 나타내는 인련의 클래스와 인터페이스를 제공합니다. 언어를 구현하거나 동적 라이브러리를 작성할 때 제공되는 클래스와 인터페이스를 사용할 수 있습니다. 해당하는 클래스와 인터페이스로는 IDynamicMetaObjectProvider, DynamicMetaObject, DynamicObject 및 ExpandoObject가 있습니다.

- Call Site Caching
:  런타임 환경에서 실행되어질 동적 개체 대해서 코드에 대한 정보를 은닉해둠으로써 이후 동일 액션의 호출시 수행속도를 향상하는 역활을 합니다. 예를 들어 a + b와 같은 연산이 있을때 a, b의 특징과 작업 관련된 정보를 캐싱해두었다가. 만약 어떠한 작업을 수행해야할때 이전에 그와 같은 작업을 수행한적이 있다면 DLR에서 캐싱된 내용을 디스패치 하여 속도를 향상시킵니다.

위와 같은 구성원이 서로 협력을 통해  동적 프로그래밍이 각 바인더별로 실행이 가능하도록 지원을 하고 있습니다.
DLR에 대해서는 여기까지 살펴보도록 하고 Dynamic lookup에 대해서 살펴보도록 하겠습니다.
혹 자세한 설명이 필요 하시다면 First Look C# 4.0 whiepaper 를 참고하시거나 별도 포스팅을 기획할 예정입니다

참고 문헌

1. 식 트리(C# 및 Visual Basic)

    : http://msdn.microsoft.com/ko-kr/library/bb397951.aspx

2. PDC2008 : The Future of C# - Anders Hejlsberg
    :
http://channel9.msdn.com/pdc2008/TL16/

3. A Dynamic Language Runtime (DLR) - Jim Hugunin's Thinking Dynamic
    :
http://blogs.msdn.com/b/hugunin/archive/2007/04/30/a-dynamic-language-runtime-dlr.aspx
4. DLR Trees (Part 1) - Jim Hugunin's Thinking Dynamic
    : http://blogs.msdn.com/b/hugunin/archive/2007/05/15/dlr-trees-part-1.aspx



포스팅을 마치며...

갑자기 일이 많아져서 포스팅이 늦어졌는데요. dynamic lookup을 살펴보기전에 DLR 존재의 여부에 대해 전달 할 필요가 있는것같아 간소화하게 작성하게 되었는데 왠지 모를 어색하고 주절주절 한 포스팅 이 되어버렸네요 T.T

다음 회차에서는 dynamic lookup의 특징과 C#의 새로운 프로그래밍 스타일인 duck typing 에 대해 살펴볼 예정입니다.
무더위 준비 잘하시고 좋은 하루 되세요 : )
감사합니다.

정은성 드림

 

출처 : http://blog.tobegin.net/31  / Writer by 정은성

Posted by Sting!
,