<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>HeeJae's Blog : 4.0</title><link>http://blogs.msdn.com/heejaechang/archive/tags/4.0/default.aspx</link><description>Tags: 4.0</description><dc:language>ko-KR</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>그외 새로 들어가는 IDE 기능들</title><link>http://blogs.msdn.com/heejaechang/archive/2009/01/25/ide.aspx</link><pubDate>Sun, 25 Jan 2009 17:41:48 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9374992</guid><dc:creator>HeeJae Chang</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/heejaechang/comments/9374992.aspx</comments><wfw:commentRss>http://blogs.msdn.com/heejaechang/commentrss.aspx?PostID=9374992</wfw:commentRss><wfw:comment>http://blogs.msdn.com/heejaechang/rsscomments.aspx?PostID=9374992</wfw:comment><description>&lt;p&gt;전에 쓴 post에 있는 새로운 IDE 기능은 dynamic과 COM interop에 관련되어 새로 추가된 기능들이고, 당연히 이 밖에도 여러가지 새로 VS10에 추가 되는 IDE 기능들이 있습니다. 이번 post에서는 요 기능들에 대해 얘기 할까 합니다.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;일단 새로 추가된 기능을 2가지로 분류 한다면, 첫번째는 새로이 들어가는 기능이고, 두번째는 기존의 기능을 향상 시킨것입니다.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;일단 새로이 들어간 기능에 대해서 먼저 쓰자면, &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Quick Search&lt;/li&gt;    &lt;ol&gt;     &lt;li&gt;solution 네에 정의된 type, member, filename등을 object browser의 find symbol 보다 아주 빠른 속도로 찾아 주는 기능입니다. 일반적으로 몇 초 안에 원하는걸 찾을수 있습니다.       &lt;br /&gt;&lt;a href="http://blogs.msdn.com/blogfiles/heejaechang/WindowsLiveWriter/IDE_4D3A/image_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/heejaechang/WindowsLiveWriter/IDE_4D3A/image_thumb.png" width="581" height="328" /&gt;&lt;/a&gt; &lt;/li&gt;   &lt;/ol&gt;    &lt;li&gt;Call Hierarchy&lt;/li&gt;    &lt;ol&gt;     &lt;li&gt;이 기능은 method 간의 caller와 callee를 찾아 주는 기능입니다. method간의 관계를 찾아 보는데 아주 유용하죠. 게다가 기존의 “Find All Reference”로는 할수 없는 Override를 찾는다 던가, 아니면 interface의 implement를 찾을수 있습니다.       &lt;br /&gt;&lt;a href="http://blogs.msdn.com/blogfiles/heejaechang/WindowsLiveWriter/IDE_4D3A/image_4.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/heejaechang/WindowsLiveWriter/IDE_4D3A/image_thumb_1.png" width="825" height="397" /&gt;&lt;/a&gt; &lt;/li&gt;   &lt;/ol&gt;    &lt;li&gt;Highlight References&lt;/li&gt;    &lt;ol&gt;     &lt;li&gt;이 기능은 같은 파일안에서 동일한 symbol을 화면에 보여 주는 기능입니다. 기존 “Find all reference”이 전체 솔루션에서 같은 symbol을 찾아준다면 이건 동일한 기능을 한 파일에서만 한다고 생각 하시면 됩니다.       &lt;br /&gt;&lt;a href="http://blogs.msdn.com/blogfiles/heejaechang/WindowsLiveWriter/IDE_4D3A/image_6.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/heejaechang/WindowsLiveWriter/IDE_4D3A/image_thumb_2.png" width="400" height="289" /&gt;&lt;/a&gt; &lt;/li&gt;   &lt;/ol&gt;    &lt;li&gt;Generate from Usage&lt;/li&gt;    &lt;ol&gt;     &lt;li&gt;이 기능은 정의되어 있지 않은 type/constructor/property/enum member 등을 사용하면, 그 type/member를 자동으로 생성해 주는 기능입니다. generate method와 비슷하다고 보시면 됩니다. 이 기능은 소위 말하는 consume first 방식의 프로그래밍을 하시는 분들을 위한 기능입니다.       &lt;br /&gt;&lt;a href="http://blogs.msdn.com/blogfiles/heejaechang/WindowsLiveWriter/IDE_4D3A/image_8.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/heejaechang/WindowsLiveWriter/IDE_4D3A/image_thumb_3.png" width="418" height="142" /&gt;&lt;/a&gt;&lt;/li&gt;   &lt;/ol&gt;    &lt;li&gt;Co/Contravariance&lt;/li&gt;    &lt;ol&gt;     &lt;li&gt; 이 기능은 간단히 말해서 이제 C# 4.0에서 아래와 같이 할수 있다는겁니다.       &lt;br /&gt;&lt;/li&gt;      &lt;table border="0" cellspacing="0" cellpadding="2" width="400"&gt;&lt;tbody&gt;         &lt;tr&gt;           &lt;td valign="top" width="400"&gt;             &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; interface I&amp;lt;in T, out U&amp;gt; { } &lt;/p&gt;              &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; class Base { }               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; class Derived : Base { } &lt;/p&gt;              &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; class Program               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {                &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; void Test(I&amp;lt;Base, Derived&amp;gt; ib)                &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {                &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; I&amp;lt;Derived, Base&amp;gt; id = ib;                &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }                &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;       &lt;/tbody&gt;&lt;/table&gt;      &lt;li&gt;아시다시피, 기존에는 같은 generic type 사이에서만 conversion이 가능했지, 보시는것 처럼 inheritance에 따라서 assign 하는것이 불가능 했엇죠. 이제 interface와 delegate의 경우, generic argument에 한해, 이것을 지원합니다. 또한 언어만 지원하는게 아니고, BCL혹은 mscorlib에 정의되어 있는 interface와 delegate 중, co/contravariance 를 씀으로써 혜택 받을수 있는 타입들은 이번 CLR 4.0에서 co/contravariance를 쓰도록 바뀌었습니다. 예를 들어 IEnumerable 이나 Func 같은것들 말이죠.&lt;/li&gt;      &lt;li&gt;보다 자세한 내용은 &lt;a href="http://blogs.msdn.com/charlie/archive/2008/10/28/linq-farm-covariance-and-contravariance-in-visual-studio-2010.aspx"&gt;Covariance and Contravariance in C# 4.0&lt;/a&gt; 혹은 &lt;a href="http://blogs.msdn.com/ericlippert/archive/tags/Covariance+and+Contravariance/default.aspx"&gt;Eric Lippert&lt;/a&gt; 을 참조 하시기 바랍니다.&lt;/li&gt;   &lt;/ol&gt; &lt;/ol&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;뭐 이정도 인거 같고, 기존의 있었던 기능들 중에 발전된것들을 나열하자면&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Background errors (live squiggles)&lt;/li&gt;    &lt;ol&gt;     &lt;li&gt;이 기능은 VS 2008 SP1에서 처음 소개된 기능인데, 이번 VS10에서 더욱 다듬어졌습니다.&lt;/li&gt;   &lt;/ol&gt;    &lt;li&gt;Refactoring performance&lt;/li&gt;    &lt;ol&gt;     &lt;li&gt;기존에 사용하던 refactoring engine을 vs 2008에서 새로이 개발한 LAF로 교체 하였습니다. 이로 인해 “Find All reference”, “Rename” 과 같은 여러 refactoring 기능들의 성능이 많이 향상 되었습니다. 특히 local variable 같은 경우는 거의 실시간으로 작동하게 되었습니다.&lt;/li&gt;      &lt;li&gt;전체 solution을 찾아야만 하는 것도 기존의 engine에 비해 거의 2배 이상 성능 향상이 있었습니다.&lt;/li&gt;   &lt;/ol&gt;    &lt;li&gt;refactoring on xml doc comment&lt;/li&gt;    &lt;ol&gt;     &lt;li&gt;밑에 보시는 바와 같이 이제 refactoring operation들이 xml doc comment안에 있는 reference도 찾아낼수 있습니다.       &lt;br /&gt;&lt;a href="http://blogs.msdn.com/blogfiles/heejaechang/WindowsLiveWriter/IDE_4D3A/image_10.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/heejaechang/WindowsLiveWriter/IDE_4D3A/image_thumb_4.png" width="842" height="89" /&gt;&lt;/a&gt; &lt;/li&gt;   &lt;/ol&gt;    &lt;li&gt;Completion set&lt;/li&gt;    &lt;ol&gt;     &lt;li&gt;기존의 completion set과 달리 존재 하지 않는 타입 혹은 심볼을 사용하더라도 강제로 commit 시키지 않습니다. 대신 builder를 이용하여 존재 하지 않은 symbol을 commit 할수 있게 해줍니다. (아쉽게도 제가 아직 이 기능이 작동하는 VS를 인스톨 하지 않았네요…)&lt;/li&gt;   &lt;/ol&gt; &lt;/ol&gt;  &lt;p&gt;뭐 기능이 향상 된건 이정도 인거 같네요. 이것보다 몇개 더 했던거 같은데, 지금 기억나는건 이게 다네요.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;몇 달후에 beta1 아마도 나올테니 관심있으신 분들은 다운 받아서 함 써봐주세요.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;그럼 수고.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9374992" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/heejaechang/archive/tags/visual+studio/default.aspx">visual studio</category><category domain="http://blogs.msdn.com/heejaechang/archive/tags/VS/default.aspx">VS</category><category domain="http://blogs.msdn.com/heejaechang/archive/tags/intellisense/default.aspx">intellisense</category><category domain="http://blogs.msdn.com/heejaechang/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.msdn.com/heejaechang/archive/tags/performance/default.aspx">performance</category><category domain="http://blogs.msdn.com/heejaechang/archive/tags/IDE/default.aspx">IDE</category><category domain="http://blogs.msdn.com/heejaechang/archive/tags/VS10/default.aspx">VS10</category><category domain="http://blogs.msdn.com/heejaechang/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/heejaechang/archive/tags/4.0/default.aspx">4.0</category><category domain="http://blogs.msdn.com/heejaechang/archive/tags/refactoring/default.aspx">refactoring</category><category domain="http://blogs.msdn.com/heejaechang/archive/tags/Generate+from+usage/default.aspx">Generate from usage</category><category domain="http://blogs.msdn.com/heejaechang/archive/tags/Quick+search/default.aspx">Quick search</category><category domain="http://blogs.msdn.com/heejaechang/archive/tags/call+hierarchy/default.aspx">call hierarchy</category><category domain="http://blogs.msdn.com/heejaechang/archive/tags/covariance/default.aspx">covariance</category><category domain="http://blogs.msdn.com/heejaechang/archive/tags/contravariance/default.aspx">contravariance</category></item><item><title>VS10에 대한 링크 모음</title><link>http://blogs.msdn.com/heejaechang/archive/2009/01/25/vs10.aspx</link><pubDate>Sun, 25 Jan 2009 08:46:31 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9374647</guid><dc:creator>HeeJae Chang</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/heejaechang/comments/9374647.aspx</comments><wfw:commentRss>http://blogs.msdn.com/heejaechang/commentrss.aspx?PostID=9374647</wfw:commentRss><wfw:comment>http://blogs.msdn.com/heejaechang/rsscomments.aspx?PostID=9374647</wfw:comment><description>&lt;p&gt;저희 팀에 &lt;a href="http://blogs.msdn.com/kirillosenkov/archive/2008/11/20/links-about-visual-studio-2010-and-c-4-0.aspx"&gt;Kirill Osenkov&lt;/a&gt;이 쓴 blog post인데 정말 유용한 VS10과 C# 4.0에 대한&amp;#160; link가 있습니다. 시간 나시면 꼭 한번 둘러 보세요.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;* 그중 가장 첫번째 PDC video 링크들은 정말 엑기스 입니다. C#과 프로그램밍에 관심있으시다면 정말 다 꼭 봐야 할 것들이죠.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;수고.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9374647" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/heejaechang/archive/tags/visual+studio/default.aspx">visual studio</category><category domain="http://blogs.msdn.com/heejaechang/archive/tags/VS/default.aspx">VS</category><category domain="http://blogs.msdn.com/heejaechang/archive/tags/2008/default.aspx">2008</category><category domain="http://blogs.msdn.com/heejaechang/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.msdn.com/heejaechang/archive/tags/IDE/default.aspx">IDE</category><category domain="http://blogs.msdn.com/heejaechang/archive/tags/VS10/default.aspx">VS10</category><category domain="http://blogs.msdn.com/heejaechang/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/heejaechang/archive/tags/4.0/default.aspx">4.0</category></item><item><title>Com Interop과 dynamic에 대한 IDE의 지원</title><link>http://blogs.msdn.com/heejaechang/archive/2009/01/24/com-interop-dynamic-ide.aspx</link><pubDate>Sun, 25 Jan 2009 07:45:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9374612</guid><dc:creator>HeeJae Chang</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/heejaechang/comments/9374612.aspx</comments><wfw:commentRss>http://blogs.msdn.com/heejaechang/commentrss.aspx?PostID=9374612</wfw:commentRss><wfw:comment>http://blogs.msdn.com/heejaechang/rsscomments.aspx?PostID=9374612</wfw:comment><description>&lt;p&gt;어제 &lt;a mce_href="http://blogs.msdn.com/heejaechang/archive/2009/01/24/9373803.aspx" target="_blank" href="http://blogs.msdn.com/heejaechang/archive/2009/01/24/9373803.aspx"&gt;포스트&lt;/a&gt;에서 제가 C# 4.0에 새로 지원 되는 주 기능으로 Com interop과 dynamic을 얘기 하면서 그에 대한 IDE의 새 기능을 쓰기로 해 놓고 C# 4.0에서 새로 지원 되는 Compiler 기능만 쓰고 이에 대한 IDE 기능은 전혀 쓰질 않았죠 ㅡ.ㅡ.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;이유는 사실 dynamic의 경우 IDE 에서 해 줄수 있는게 별로 없기 때문이기도 합니다.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;이 Com Interop이나 dynamic이 C# 언어 쪽에서 본다면 여러 dynamic 언어들을 무척 간단하게 사용할수 있게 해 주는 반면 IDE 쪽에서는 별로 크게 도움을 줄만한게 없습니다. IDE에서 제공 하는 intellisense 라는게 static 한 타입 정보들이 있어야 보여 줄수 있는건데 dynamic 의 경우 다 runtime에 타입들이 정해지는거라 design time에 IDE가 해줄수 있는거라곤 사실 별로 없죠.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;그래서 이로 인해 새로 들어간 IDE 기능이라고 해 봤자, &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;ref 나 optional parameter처럼 생략 할수 있는 정보들의 경우, parameter help 및 그 와 비슷한 곳에서 “[]”로 옵션 항목임을 표시해 줍니다.      &lt;br&gt;&lt;a mce_href="http://blogs.msdn.com/blogfiles/heejaechang/WindowsLiveWriter/ComInteropdynamicIDE_E1C4/image_6.png" href="http://blogs.msdn.com/blogfiles/heejaechang/WindowsLiveWriter/ComInteropdynamicIDE_E1C4/image_6.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" mce_src="http://blogs.msdn.com/blogfiles/heejaechang/WindowsLiveWriter/ComInteropdynamicIDE_E1C4/image_thumb_2.png" width="406" height="57" src="http://blogs.msdn.com/blogfiles/heejaechang/WindowsLiveWriter/ComInteropdynamicIDE_E1C4/image_thumb_2.png"&gt;&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;No PIA의 경우는 프로젝트 Property 페이지에 아래와 같은 새 옵션이 들어가게 됐구요. 한가지 알아 두셔야 할 것은, No PIA 옵션을 사용할 경우, COM interface에 들어 있는 모든 object 타입이 자동으로 dynamic 타입으로 변환 됩니다.      &lt;br&gt;&lt;a mce_href="http://blogs.msdn.com/blogfiles/heejaechang/WindowsLiveWriter/ComInteropdynamicIDE_E1C4/image_10.png" href="http://blogs.msdn.com/blogfiles/heejaechang/WindowsLiveWriter/ComInteropdynamicIDE_E1C4/image_10.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" mce_src="http://blogs.msdn.com/blogfiles/heejaechang/WindowsLiveWriter/ComInteropdynamicIDE_E1C4/image_thumb_4.png" width="429" height="211" src="http://blogs.msdn.com/blogfiles/heejaechang/WindowsLiveWriter/ComInteropdynamicIDE_E1C4/image_thumb_4.png"&gt;&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Named and Optional Parameter의 경우는 method를 정의하거나 부를때 아래처럼 사용할수 사용하실수 있게 됐습니다.      &lt;br&gt; &lt;a mce_href="http://blogs.msdn.com/blogfiles/heejaechang/WindowsLiveWriter/ComInteropdynamicIDE_E1C4/image_18.png" href="http://blogs.msdn.com/blogfiles/heejaechang/WindowsLiveWriter/ComInteropdynamicIDE_E1C4/image_18.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" mce_src="http://blogs.msdn.com/blogfiles/heejaechang/WindowsLiveWriter/ComInteropdynamicIDE_E1C4/image_thumb_8.png" width="697" height="97" src="http://blogs.msdn.com/blogfiles/heejaechang/WindowsLiveWriter/ComInteropdynamicIDE_E1C4/image_thumb_8.png"&gt;&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Refactoring 기능들의 경우, 새로운 named and optional parameter 들을 지원 할수 있게 변경 됐습니다. 특히 signature change의 경우는 아래와 같이 새로운 dialog를 갖게 됐구요.      &lt;br&gt;&lt;a mce_href="http://blogs.msdn.com/blogfiles/heejaechang/WindowsLiveWriter/ComInteropdynamicIDE_E1C4/image_20.png" href="http://blogs.msdn.com/blogfiles/heejaechang/WindowsLiveWriter/ComInteropdynamicIDE_E1C4/image_20.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" mce_src="http://blogs.msdn.com/blogfiles/heejaechang/WindowsLiveWriter/ComInteropdynamicIDE_E1C4/image_thumb_9.png" width="573" height="402" src="http://blogs.msdn.com/blogfiles/heejaechang/WindowsLiveWriter/ComInteropdynamicIDE_E1C4/image_thumb_9.png"&gt;&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Dynamic invocation의 경우는 아쉽게도 intellisense가 지원되지 않습니다. 다만, 현재 사용하는 expression이 dynamic 구문이라는걸 알려주기 위해 아래처럼 표시를 해줍니다.      &lt;br&gt; &lt;a mce_href="http://blogs.msdn.com/blogfiles/heejaechang/WindowsLiveWriter/ComInteropdynamicIDE_E1C4/image_24.png" href="http://blogs.msdn.com/blogfiles/heejaechang/WindowsLiveWriter/ComInteropdynamicIDE_E1C4/image_24.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" mce_src="http://blogs.msdn.com/blogfiles/heejaechang/WindowsLiveWriter/ComInteropdynamicIDE_E1C4/image_thumb_11.png" width="310" height="117" src="http://blogs.msdn.com/blogfiles/heejaechang/WindowsLiveWriter/ComInteropdynamicIDE_E1C4/image_thumb_11.png"&gt;&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;QuickInfo의 경우도 역시, 현재 마우스 밑에 있는 구문이 dynamic expression이라는것만 알려줍니다.      &lt;br&gt;&lt;a mce_href="http://blogs.msdn.com/blogfiles/heejaechang/WindowsLiveWriter/ComInteropdynamicIDE_E1C4/image_26.png" href="http://blogs.msdn.com/blogfiles/heejaechang/WindowsLiveWriter/ComInteropdynamicIDE_E1C4/image_26.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" mce_src="http://blogs.msdn.com/blogfiles/heejaechang/WindowsLiveWriter/ComInteropdynamicIDE_E1C4/image_thumb_12.png" width="318" height="115" src="http://blogs.msdn.com/blogfiles/heejaechang/WindowsLiveWriter/ComInteropdynamicIDE_E1C4/image_thumb_12.png"&gt;&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Edit and Continue 역시, 현재로써는 method block안에 dynamic invocation 이 있을 경우, EnC를 사용할수 없도록 되어 있습니다.      &lt;br&gt;&lt;a mce_href="http://blogs.msdn.com/blogfiles/heejaechang/WindowsLiveWriter/ComInteropdynamicIDE_E1C4/image_28.png" href="http://blogs.msdn.com/blogfiles/heejaechang/WindowsLiveWriter/ComInteropdynamicIDE_E1C4/image_28.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" mce_src="http://blogs.msdn.com/blogfiles/heejaechang/WindowsLiveWriter/ComInteropdynamicIDE_E1C4/image_thumb_13.png" width="743" height="90" src="http://blogs.msdn.com/blogfiles/heejaechang/WindowsLiveWriter/ComInteropdynamicIDE_E1C4/image_thumb_13.png"&gt;&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Refactoring 역시 dynamic member들의 경우 지원 되지 않습니다. Go to definition 역시 지원되지 않구요. 이유는 당연히 design time에 타입이 무엇인지 모르므로, member들 역시 마찬가지구요. 따라서 아무것도 지원되지 않습니다. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;아마 이정도가 C# 4.0의 새로운 기능인 COM interop과 dynamic을 위해 새로 들어간 IDE기능들인거 같습니다. 비록 이번 버젼에는 이정도 밖에 지원하지 않지만, 내부적으로는 어떻게 해야 dynamic 타입을 static 정보가 존재 하는 기존 C# construct들 만큼은 정보들을 제공할수 있을까 논의 중입니다. F#의 interactive window와 비슷한 뭐 그런것 말이죠.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;그럼 도움 되었음 좋겠네요.&lt;/p&gt;  &lt;p&gt;수고.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9374612" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/heejaechang/archive/tags/visual+studio/default.aspx">visual studio</category><category domain="http://blogs.msdn.com/heejaechang/archive/tags/VS/default.aspx">VS</category><category domain="http://blogs.msdn.com/heejaechang/archive/tags/2008/default.aspx">2008</category><category domain="http://blogs.msdn.com/heejaechang/archive/tags/intellisense/default.aspx">intellisense</category><category domain="http://blogs.msdn.com/heejaechang/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.msdn.com/heejaechang/archive/tags/IDE/default.aspx">IDE</category><category domain="http://blogs.msdn.com/heejaechang/archive/tags/VS10/default.aspx">VS10</category><category domain="http://blogs.msdn.com/heejaechang/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/heejaechang/archive/tags/dynamic/default.aspx">dynamic</category><category domain="http://blogs.msdn.com/heejaechang/archive/tags/4.0/default.aspx">4.0</category><category domain="http://blogs.msdn.com/heejaechang/archive/tags/COM+interop/default.aspx">COM interop</category></item><item><title>다음 버젼에 새로 추가 되는 기능들 …</title><link>http://blogs.msdn.com/heejaechang/archive/2009/01/24/9373803.aspx</link><pubDate>Sat, 24 Jan 2009 11:18:04 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9373803</guid><dc:creator>HeeJae Chang</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/heejaechang/comments/9373803.aspx</comments><wfw:commentRss>http://blogs.msdn.com/heejaechang/commentrss.aspx?PostID=9373803</wfw:commentRss><wfw:comment>http://blogs.msdn.com/heejaechang/rsscomments.aspx?PostID=9373803</wfw:comment><description>&lt;p&gt;안녕하세요, 간만에 포스팅 합니다. 이제 비쥬얼 스튜디오 2008이 릴리지 된지도 일년이 넘어 가네요. 이번 포스팅은 다음버젼의 VS에 들어가게 될 새 기능에 대한 간략한 소개 입니다. 물론 제가 C# IDE 팀이므로 C# IDE에 관계된거만 이겠지만요 하하하.&lt;/p&gt;  &lt;p&gt;일단 가장 눈에 띄는게 VS 자체가 WPF로 바뀐겁니다. 물론 슬쩍 보기엔 기존 VS와 다른게 하나도 없어 보이지만, 자세히 보면 editor에서 부터 shell, menu, toolbar 까지 다 WPF로 바뀌었습니다. WPF로 바뀌므로 해서 사용자 분들에게 가는 이익은? 전에 비해 훨씬 다양한 방법으로 data를 visualize 해줄수 있다는거 겠죠. 또한 WPF 성능이 향상 함에 따라 좀 더 많은 부분들이 하드웨어의 도움 받아 더 화면에 그려지게 됨으로써 성능 향상도 기대해 볼수 있겠죠. 뭐 아직 까진 아니지만 하하.&lt;/p&gt;  &lt;p&gt;지금 딱 생각나는 다른 점 하나는 WPF 답게 clear type 과 zoom이 기본 지원 된다는거?&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;그럼 이제 C# IDE 에 대해서 얘기를 하자면, 일단 이번 C# 4.0의 주 포인트는 COM interop 및 dynamic 입니다. C# 1.0이 C# 언어 자체의 파운데이션을 확립하는게 주 였다면 2.0는 &lt;a href="http://msdn.microsoft.com/en-us/library/ms379564(VS.80).aspx" target="_blank"&gt;generics&lt;/a&gt;이 요 였고 3.0은 &lt;a href="http://msdn.microsoft.com/en-us/library/bb397933.aspx" target="_blank"&gt;Linq&lt;/a&gt; 였죠. 이번 4.0은 확실한 COM interop 및 dynamic 의 지원입니다. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;일단 COM interop부터 얘기를 시작하면, 아시다시피 C#이 .NET 언어이므로 자연스럽게 COM interop을 지원하기는 합니다만, 그 사용 방법이 무척 노가다 였습니다. &lt;/p&gt;  &lt;p&gt;예를 들어, 그냥 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#은 이런걸 지원하지 않기때문에 결국 메소드 하나 부르는데 무시 하는 파라메터를 엄청 넣어 부르게 됩니다. &lt;/p&gt;  &lt;p&gt;이 모든 것들이 다 C# 이 COM interop에 별로 friendly 하지 않다는 증거들이죠. 이번 C# 4.0의 목표는 바로 이런 모든걸 VB 수준으로 쉽게 COM interop들을 사용할수 있게 하는게 목표 입니다. COM interop의 경우에만 특별히 기존 C#의 언어규칙에서 예외를 사용할수 있게 해 주는거죠.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;위에 쓴 예는 아주 간단한것 몇개만 나열한것이고, 실제 이걸 가능하게 하기 위해 새로 들어간 기능들은 아래와 같습니다.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;ref의 생략 – COM interop interface를 사용할 경우, parameter 앞의 ref를 생략할수 있습니다. &lt;/li&gt;    &lt;li&gt;PIA의 생략 – COM interop interface를 사용할 경우, &lt;a href="http://msdn.microsoft.com/en-us/library/aax7sdch.aspx" target="_blank"&gt;Primary interop assemblies&lt;/a&gt;를 프로그램과 같이 deploy 하지 않으셔도 됩니다. 대신 실제 프로그램에서 사용된 type은 프로그램에 embed 되게 됩니다. &lt;/li&gt;    &lt;li&gt;Named and Optional Parameter – method를 정의 하거나 부를때, VB 혹은 C++ 처럼 기본 default 값을 주고 생략할수 있게 하거나, parameter의 위치와 상관 없이 parameter의 이름을 이용해 함수를 부를수 있습니다. &lt;/li&gt;    &lt;li&gt;dynamic invocation – 뒤에 좀 더 자세히 설명 하겠지만, 더이상 함수 하나를 부르기 위해 cast에 cast를 할 필요 없이, 그냥 다른 dynamic 언어나 VB 처럼 함수 이름을 써 주면, runtime에 맞는 함수를 찾아서 알아서 불러줍니다. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;이 기능들이 한대 어울려지면, COM interop 사용이 기존 C# 코드 사용할때 혹은 VB나 script 언어로 COM 을 사용할때 만큼이나 간편하게 됩니다.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;다음 이슈인 dynamic은 사실 Linq와 비슷합니다. Linq가 C# 언어안에서 SQL을 사용하게 하기 위한 거다 생각 하시는 분들도 계실지 모르지만 사실 Linq는 back end의 provider에 상관 없이 C#에서 한가지 syntax로 여러 가지 다양한 data를 manipulate 하게 해주는 framework 같은겁니다. 같은 linq query를 이용해서 object를 query 할수도 있고, sql, xml 혹은 linq provider를 지원 하는 많은 다양한 back end를 사용할수 있게 되는거죠. (예 &lt;a href="http://channel9.msdn.com/posts/jennmar/C-30-Part-1-New-Language-Features/" target="_blank"&gt;참조&lt;/a&gt;)&lt;/p&gt;  &lt;p&gt;그럼 dynamic이 Linq와 비슷하다니 무슨 뜻인가? 예 생각 하신데로 dynamic은 단지 COM interop만을 위한게 아닌 COM interop의 경우와 같이 runtime에 타입 정보를 얻어 dynamic 하게 콜을 할수 있게 해주는 framework 같은겁니다. 좀 더 정확하게 말하면 그 platform은 &lt;a href="http://en.wikipedia.org/wiki/Dynamic_Language_Runtime" target="_blank"&gt;DLR&lt;/a&gt;이고 C#은 그 DLR이 제공해주는 정보를 소비 하게 되는거고 실제 provider들은 DLR을 중심에 두고 작동하게 되는거죠. Linq도 마찬가지 입니다. Linq의 경우 CLR이 그 중심에 있는거죠. framework는 System.Core.dll에 들어 있고.&lt;/p&gt;  &lt;p&gt;결론적으로 C# 4.0에서 dynamic이 지원 된다는 말은 COM interop 뿐만 아니라, Silverlight, IronRuby, IronPhyton 같은 언어에서 정의한 타입과 method들을 C#에서 같은 syntax로 사용할수 있다는 말입니다. Linq가 있어서 sql, xml, plinq 와 같은 다양한 데이타 콜랙션들을 같은 syntax로 사용할수 있었듯이 말입니다.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;말로만 장대 하게 떠들었는데, 여기 보시면 절대 후회 하지 않으실 link를 몇개 걸어 놓겠습니다. 정확히 감이 안 잡히시는 분들은 한번 보시기 바랍니다.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Anders_Hejlsberg" target="_blank"&gt;Anders Hejlsberg&lt;/a&gt;가 이번 PDC에서 발표한 &lt;a href="http://channel9.msdn.com/pdc2008/TL16/" target="_blank"&gt;동영상&lt;/a&gt; 입니다.       &lt;ul&gt;       &lt;li&gt;이분이 바로 C# 및 터보 파스칼, 델파이를 설계하고 만드신 분이죠 하하 강력 추천 입니다. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;저희 팀의 PM인 Alex Turner가 dynamic에 대해 PDC에서 데모한 &lt;a href="http://channel9.msdn.com/pdc2008/TL54/" target="_blank"&gt;동영상&lt;/a&gt;입니다. 앤덜스것에 비해 직관적으로 dynamic이 어떻게 이익이 될수 있는지 알수 있는 동영상입니다. &lt;/li&gt;    &lt;li&gt;마지막으로 저희 C# Compiler Team 분들이 dynamic에 대해 자세히 설명하는 &lt;a href="http://channel9.msdn.com/shows/Going+Deep/Inside-C-40-dynamic-type-optional-parameters-more-COM-friendly/" target="_blank"&gt;동영상&lt;/a&gt;입니다. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;그럼 재미있으셨으면 좋겠습니다.&lt;/p&gt;  &lt;p&gt;수고.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9373803" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/heejaechang/archive/tags/visual+studio/default.aspx">visual studio</category><category domain="http://blogs.msdn.com/heejaechang/archive/tags/VS/default.aspx">VS</category><category domain="http://blogs.msdn.com/heejaechang/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.msdn.com/heejaechang/archive/tags/IDE/default.aspx">IDE</category><category domain="http://blogs.msdn.com/heejaechang/archive/tags/VS10/default.aspx">VS10</category><category domain="http://blogs.msdn.com/heejaechang/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/heejaechang/archive/tags/dynamic/default.aspx">dynamic</category><category domain="http://blogs.msdn.com/heejaechang/archive/tags/4.0/default.aspx">4.0</category><category domain="http://blogs.msdn.com/heejaechang/archive/tags/COM+interop/default.aspx">COM interop</category></item></channel></rss>