다음 버젼에 새로 추가 되는 기능들 …

안녕하세요, 간만에 포스팅 합니다. 이제 비쥬얼 스튜디오 2008이 릴리지 된지도 일년이 넘어 가네요. 이번 포스팅은 다음버젼의 VS에 들어가게 될 새 기능에 대한 간략한 소개 입니다. 물론 제가 C# IDE 팀이므로 C# IDE에 관계된거만 이겠지만요 하하하.

일단 가장 눈에 띄는게 VS 자체가 WPF로 바뀐겁니다. 물론 슬쩍 보기엔 기존 VS와 다른게 하나도 없어 보이지만, 자세히 보면 editor에서 부터 shell, menu, toolbar 까지 다 WPF로 바뀌었습니다. WPF로 바뀌므로 해서 사용자 분들에게 가는 이익은? 전에 비해 훨씬 다양한 방법으로 data를 visualize 해줄수 있다는거 겠죠. 또한 WPF 성능이 향상 함에 따라 좀 더 많은 부분들이 하드웨어의 도움 받아 더 화면에 그려지게 됨으로써 성능 향상도 기대해 볼수 있겠죠. 뭐 아직 까진 아니지만 하하.

지금 딱 생각나는 다른 점 하나는 WPF 답게 clear type 과 zoom이 기본 지원 된다는거?

 

그럼 이제 C# IDE 에 대해서 얘기를 하자면, 일단 이번 C# 4.0의 주 포인트는 COM interop 및 dynamic 입니다. C# 1.0이 C# 언어 자체의 파운데이션을 확립하는게 주 였다면 2.0는 generics이 요 였고 3.0은 Linq 였죠. 이번 4.0은 확실한 COM interop 및 dynamic 의 지원입니다.

 

일단 COM interop부터 얘기를 시작하면, 아시다시피 C#이 .NET 언어이므로 자연스럽게 COM interop을 지원하기는 합니다만, 그 사용 방법이 무척 노가다 였습니다.

예를 들어, 그냥 TLB에서 COM interop interface를 생성할 경우 기대와는 달리 많은 interface들이 strong type이 아닌 object를 입력 혹은 리턴값으로 돌려 주게 됩니다. 따라서 C# 같은 강력한 static type 언어에서 이를 쓰려면 리턴된 object를 원하는 type으로 다시 casting 한 후에 사용하게 되므로 method 하나 부르는데 코드가 한 가득이게 되죠. 또 C# 언어와 COM interface 사이의 괴리로 인해 쓰잘데기 없는 코드를 한가득 써야 했습니다. 예를 들어 COM interface는 overload를 지원하지 않는 대신에 optional parameter와 default value를 지원하지요. 하지만 C#은 이런걸 지원하지 않기때문에 결국 메소드 하나 부르는데 무시 하는 파라메터를 엄청 넣어 부르게 됩니다.

이 모든 것들이 다 C# 이 COM interop에 별로 friendly 하지 않다는 증거들이죠. 이번 C# 4.0의 목표는 바로 이런 모든걸 VB 수준으로 쉽게 COM interop들을 사용할수 있게 하는게 목표 입니다. COM interop의 경우에만 특별히 기존 C#의 언어규칙에서 예외를 사용할수 있게 해 주는거죠.

 

위에 쓴 예는 아주 간단한것 몇개만 나열한것이고, 실제 이걸 가능하게 하기 위해 새로 들어간 기능들은 아래와 같습니다.

  1. ref의 생략 – COM interop interface를 사용할 경우, parameter 앞의 ref를 생략할수 있습니다.
  2. PIA의 생략 – COM interop interface를 사용할 경우, Primary interop assemblies를 프로그램과 같이 deploy 하지 않으셔도 됩니다. 대신 실제 프로그램에서 사용된 type은 프로그램에 embed 되게 됩니다.
  3. Named and Optional Parameter – method를 정의 하거나 부를때, VB 혹은 C++ 처럼 기본 default 값을 주고 생략할수 있게 하거나, parameter의 위치와 상관 없이 parameter의 이름을 이용해 함수를 부를수 있습니다.
  4. dynamic invocation – 뒤에 좀 더 자세히 설명 하겠지만, 더이상 함수 하나를 부르기 위해 cast에 cast를 할 필요 없이, 그냥 다른 dynamic 언어나 VB 처럼 함수 이름을 써 주면, runtime에 맞는 함수를 찾아서 알아서 불러줍니다.

이 기능들이 한대 어울려지면, COM interop 사용이 기존 C# 코드 사용할때 혹은 VB나 script 언어로 COM 을 사용할때 만큼이나 간편하게 됩니다.

 

다음 이슈인 dynamic은 사실 Linq와 비슷합니다. Linq가 C# 언어안에서 SQL을 사용하게 하기 위한 거다 생각 하시는 분들도 계실지 모르지만 사실 Linq는 back end의 provider에 상관 없이 C#에서 한가지 syntax로 여러 가지 다양한 data를 manipulate 하게 해주는 framework 같은겁니다. 같은 linq query를 이용해서 object를 query 할수도 있고, sql, xml 혹은 linq provider를 지원 하는 많은 다양한 back end를 사용할수 있게 되는거죠. (예 참조)

그럼 dynamic이 Linq와 비슷하다니 무슨 뜻인가? 예 생각 하신데로 dynamic은 단지 COM interop만을 위한게 아닌 COM interop의 경우와 같이 runtime에 타입 정보를 얻어 dynamic 하게 콜을 할수 있게 해주는 framework 같은겁니다. 좀 더 정확하게 말하면 그 platform은 DLR이고 C#은 그 DLR이 제공해주는 정보를 소비 하게 되는거고 실제 provider들은 DLR을 중심에 두고 작동하게 되는거죠. Linq도 마찬가지 입니다. Linq의 경우 CLR이 그 중심에 있는거죠. framework는 System.Core.dll에 들어 있고.

결론적으로 C# 4.0에서 dynamic이 지원 된다는 말은 COM interop 뿐만 아니라, Silverlight, IronRuby, IronPhyton 같은 언어에서 정의한 타입과 method들을 C#에서 같은 syntax로 사용할수 있다는 말입니다. Linq가 있어서 sql, xml, plinq 와 같은 다양한 데이타 콜랙션들을 같은 syntax로 사용할수 있었듯이 말입니다.

 

말로만 장대 하게 떠들었는데, 여기 보시면 절대 후회 하지 않으실 link를 몇개 걸어 놓겠습니다. 정확히 감이 안 잡히시는 분들은 한번 보시기 바랍니다.

  • Anders Hejlsberg가 이번 PDC에서 발표한 동영상 입니다.
    • 이분이 바로 C# 및 터보 파스칼, 델파이를 설계하고 만드신 분이죠 하하 강력 추천 입니다.
  • 저희 팀의 PM인 Alex Turner가 dynamic에 대해 PDC에서 데모한 동영상입니다. 앤덜스것에 비해 직관적으로 dynamic이 어떻게 이익이 될수 있는지 알수 있는 동영상입니다.
  • 마지막으로 저희 C# Compiler Team 분들이 dynamic에 대해 자세히 설명하는 동영상입니다.

 

그럼 재미있으셨으면 좋겠습니다.

수고.