[Áöµð³ÝÄÚ¸®¾Æ]2000³â º½ NGWS(Next Generation Windows Services)¶ó´Â À̸§À¸·Î ¼Ò°³µÆ´ø MSÀÇ Â÷¼¼´ë °³¹ß ȯ°æÀÌ ¿À·£ º£Å¸ ±â°£ÀÇ ³ôÀº °ü½ÉÀ» µÚ·Î Çϰí, 2002³â ´å³Ý ÇÁ·¹ÀÓ¿öÅ© 1.0¡¤ºñÁÖ¾ó ½ºÆ©µð¿À ´å³Ý 2002¿Í ÇÔ²² ¼¼»ó¿¡ ³ªÅ¸³µ´Ù.
±× ÈÄ ¸¶ÀÌ³Ê ¾÷±×·¹À̵åÀÎ ´å³Ý ÇÁ·¹ÀÓ¿öÅ© 1.1°ú ºñÁÖ¾ó ½ºÆ©µð¿À 2003À¸·Î ¾ÈÁ¤ÈµÆ°í, ÀÌÁ¦´Â 2005³â Ãâ½Ã¸¦ À§ÇØ ÇöÀç ´å³Ý ÇÁ·¹ÀÓ¿öÅ© 2.0°ú ºñÁÖ¾ó ½ºÆ©µð¿À 2005 º£Å¸1ÀÌ Ãâ½ÃµÆ´Ù. º£Å¸ ½ÃÀýÀÇ ¿±â°¡ ½ÇÁ¦ Ãâ½Ã ½ÃÁ¡ÀÇ IT °æ±â ±Þ·©À¸·Î ´Ù¼Ò ºÎÁøÇÏÁö ¾Ê´À³Ä´Â ÀǰßÀÌ ÀÖ¾úÁö¸¸ ±â¾÷ ȯ°æÀ» Áß½ÉÀ¸·Î 2³â°£ ¼ºÀå¼¼¸¦ ¿Ã¸®°í ÀÖ´Ù. ºñ·Ï ºÏ¹Ì Áö¿ªÀ¸·Î Á¦ÇѵǾî ÀÖÁö¸¸ 2003³â¸»À» ±âÁØÀ¸·Î ´å³Ý °³¹ßÀÚ°¡ ÀÚ¹Ù °³¹ßÀÚ¸¦ ³Ñ¾î¼°í ÀÖ´Ù(<±×¸² 1>).
±¹³»¿¡¼´Â ¾ÆÁ÷ ´å³ÝÀÇ Á¡À¯À²ÀÌ ÀÚ¹Ù¿¡ ºñÇØ ³·Áö¸¸ ºü¸¥ ½Ã°£¿¡ ¹Ù²ð °ÍÀ¸·Î ¿¹»óµÇ°í ÀÖ´Ù. ÀÌÁ¦ º»°ÝÀûÀ¸·Î MSÀÇ °³¹ß ȯ°æÀÇ º¯È¿¡ ´ëÇØ ¾Ë¾Æº¸°Ú´Ù.
 |
| <±×¸² 1> ´å³Ý Ç÷§Æû äÅ÷ü(2002.2/4ºÐ±â¢¦2003³â 2/ºÐ±â) |
´å³Ý ÇÁ·¹ÀÓ¿öÅ© 2.0ÀÇ º¯È
ÃÖ±Ù µé¾î ¸¹Àº °³¹ßÀÚµéÀÌ MSÀÇ °³¹ß ȯ°æÀº ´å³Ý ÇÁ·¹ÀÓ¿öÅ©¿Í ºñÁÖ¾ó ½ºÆ©µð¿À ´å³Ý °³¹ß Åø¸¸À¸·Î´Â 2% ºÎÁ·ÇÏ´Ù´Â °ÍÀ» À̾߱âÇϰí ÀÖ´Ù. ÀÌ 2%¿¡ ¾î¶² °ÍÀÌ Æ÷ÇԵǾî Àֱ⠶§¹®¿¡ ´å³Ý ÇÁ·¹ÀÓ¿öÅ©¿Í ºñÁÖ¾ó ½ºÆ©µð¿À¸¸À¸·Î´Â Èûµé´Ù´Â °ÍÀÎÁö ÇÑ ¹ø »ìÆìº¸°Ú´Ù.
´å³ÝÀº ´Ü¼øÇÑ °³¹ß ÇÁ·¹ÀÓ¿öÅ©¶ó±âº¸´Ù´Â ºóÆ´¾ø´Â ÄÄÇ»ÆÃ ȯ°æÀ» ±¸ÃàÇϱâ À§ÇÑ À¥ ¼ºñ½º ÀÎÇÁ¶ó ½Ã½ºÅÛÀÌ´Ù. À©µµ¿ì¿Í ¿£ÅÍÇÁ¶óÀÌÁî ¼¹ö¸¦ ÅëÇØ ¿î¿µ ÀÎÇÁ¶ó ±¸Á¶¸¦ Á¦°øÇϰí, ±âÁ¸ À¥ ¼ºñ½ºÀÎ ASMX¿Í WSE(Web Services Enhancements), ·ÕÈ¥ÀÇ Àεð°í(Indigo)¸¦ À§ÇØ ¿¬°áµÈ ½Ã½ºÅÛ È¯°æÀÌ µÈ´Ù. ±×¸®°í ¼ºñ½º, ¾ÆÅ°ÅØÃ³ °¡ÀÌ´ø½º(Patterns & Practices,
msdn.microsoft.com/architecture/patterns/default.aspx), µð¹ÙÀ̽º, ºñÁî´Ï½º ÀÀ¿ë, Á¤º¸ ±Ù·ÎÀÚ µµ±¸¿Í ÀÎÇÁ¶ó¸¦ Á¾ÇÕÀûÀ¸·Î Áö¿øÇϰí ÀÖ´Ù.
ÀÌ·¸°Ô º¹ÀâÇÑ È¯°æÀ» Áö¿øÇÏ´Ï °³¹ßÀÚµéÀÌ ´å³Ý °³¹ß ȯ°æ¿¡ ´ëÇØ È¥¶õÀ» ´À³¢°Ô µÇ°í ´å³ÝÀÌ µµ´ëü ¹«¾ùÀÎÁö Àß ¸ð¸£°Ú´Ù´Â À̾߱⸦ ¸¹ÀÌ ÇÏ°Ô µÈ´Ù.
È¥¶õ(?)À» ÁÙÀ̱â À§ÇØ ¿ì¼± ´å³Ý ÇÁ·¹ÀÓ¿öÅ©¿¡ ´ëÇØ¼¸¸ »ìÆìº¸ÀÚ. ´å³Ý ÇÁ·¹ÀÓ¿öÅ©´Â CLS(Common Language Specification)¸¦ Áö¿øÇÏ´Â ¾ð¾î(C#, VB.NET, J#, ¸Å´ÏÁöµå C++ µî)·Î ¸¸µé¾îÁø IL(Intermediate Language)·Î ÀÛ¼ºµÈ Äڵ带 ½ÇÇàÇϴ ȯ°æÀÌ´Ù.
´å³Ý ÇÁ·¹ÀÓ¿öÅ© 2.0Àº Å©°Ô CLR 2.0, À©µµ¿ì Æû(Windows Forms) 2.0, ASP.NET 2.0, ´å³Ý ÄÄÆÑÆ® ÇÁ·¹ÀÓ¿öÅ© 2.0, ADO.NET 2.0À¸·Î ±¸ºÐÇÒ ¼ö ÀÖ´Ù. CLR 2.0À» Á¦¿ÜÇÑ ´Ù¸¥ ³»¿ëÀº BCL¿¡ Æ÷ÇԵǴ ¶óÀ̺귯¸® ¼º°ÝÀÌ °ÇϹǷΠ¿©±â¼´Â CLR 2.0À» Áß½ÉÀ¸·Î »ìÆìº¸°Ú´Ù. ´å³Ý 2.0ÀÇ Å« º¯È¸¦ »ìÆìº¸¸é ´ÙÀ½ ¼¼ °¡Áö ¿µ¿ªÀ¸·Î ±¸ºÐÇÒ ¼ö ÀÖ´Ù.
¡ß Ç÷§Æû È®Àå : SQL ¼¹ö¿Í ÅëÇÕ, 64ºñÆ® ÇÁ·¹ÀÓ¿öÅ© Áö¿ø
¡ß Ç÷§Æû °³¼± : ¼º´É Çâ»ó, RAD µð¹ö±ë, CLR º¸¾È °È
¡ß Ç÷§Æû Çõ½Å : Á¦³Ê¸¯(Generics) Áö¿ø, BCL °È
¸ÕÀú SQL ¼¹ö¿ÍÀÇ ÅëÇÕÀ¸·Î °¡Áú ¼ö ÀÖ´Â ÀåÁ¡Àº ´ÙÀ½°ú °°´Ù.
¡ß ´å³Ý ÇÁ·¹ÀÓ¿öÅ©ÀÇ °³¹ß ¸ðµ¨À» µ¥ÀÌÅͺ£À̽º Ãþ¿¡µµ ¹Ù·Î Àû¿ëÇÒ ¼ö ÀÖ´Ù.
¡ß ºñÁî´Ï½º ·ÎÁ÷À» °³¹ß ÃþÀ¸·Î ½±°Ô ¸¶À̱׷¹À̼ÇÇÒ ¼ö ÀÖ´Ù.
¡ß µ¥ÀÌÅͺ£À̽º È®ÀåÀ» ¾ÈÀüÇÏ°í ½±°Ô ÁøÇàÇÒ ¼ö ÀÖ´Ù.
°á·ÐÀûÀ¸·Î ÀúÀå ÇÁ·Î½ÃÀú¿Í Æ®¸®°Å(Triggers), µ¥ÀÌÅÍ Å¸ÀÔÀÇ Á¤ÀǸ¦ °ü¸®µÇ´Â ÄÚµå(managed code)·Î ÇÒ ¼ö ÀÖÀ¸¹Ç·Î ÈξÀ °³¹ß ÁöÇâÀûÀÎ µ¥ÀÌÅͺ£À̽º ȯ°æÀ» Á¦°øÇØÁØ´Ù.
 |
| <±×¸² 2> SQL ³»ÀÇ CLR ±â´É |
64ºñÆ® ÇÁ·¹ÀÓ¿öÅ© Áö¿øÀ¸·Î °¡Áú ¼ö ÀÖ´Â ÀåÁ¡À¸·Î´Â x86-64¿Í IA-64 ¾ÆÅ°ÅØÃ³¡¤°ü¸®µÇ´Â ½ÇÇà ȯ°æ¡¤WoW64 Áö¿øÀ» µé ¼ö ÀÖ´Ù. ÇöÀç 64ºñÆ® ÇÁ·¹ÀÓ¿öÅ© ¿ª½Ã º£Å¸1ÀÌ ³ª¿Í ÀÖ´Â »óÅÂÀÌ°í ºñÁÖ¾ó ½ºÆ©µð¿À 2005¸¦ ¼³Ä¡ÇÒ ¶§ ÀÎÅÚ°ú AMD CPU¸¦ ¼±ÅÃÇØ ¼³Ä¡ÇÒ ¼ö ÀÖ´Ù. WoW64 Áö¿øÀ¸·Î 64ºñÆ® ȯ°æ¿¡¼ 32ºñÆ® ȯ°æ ±¸µ¿ÀÌ °¡´ÉÇÏ¸ç °³¹ß, ¹èÆ÷, µð¹ö±ë ¶ÇÇÑ 64ºñÆ®¿Í 32ºñÆ®¸¦ ¼±ÅÃÇÒ ¼ö ÀÖ´Ù.
¼º´É ¿ª½Ã Å©°Ô Çâ»óµÆ´Ù. ±âÁ¸ CLR 1.1¿¡ ºñÇØ CLR 2.0Àº ¾ÖÇø®ÄÉÀÌ¼Ç ±¸µ¿ ½ÃÁ¡ÀÇ IL ÄÚµå º´ÇÕ°ú ±¸µ¿¿¡¼ ÁÁÀº ¼º´ÉÀ» º¸¿©ÁÖ¸ç, ÇÑ ¹ø JIT(Just In Time) ÄÄÆÄÀÏµÈ Äڵ带 µð½ºÅ©¿¡ ÀúÀåÇÑ ÈÄ »ç¿ëÇÔÀ¸·Î½á ¼º´ÉÀÌ Çâ»óµÆ´Ù. ±×¸®°í APPDomain Remoting¿¡¼ ¼ö½Ê ¹è ÀÌ»ó, ±×¸®°í µ¨¸®°ÔÀÌÆ®(delegate) 󸮿¡¼ µÎ ¹èÀÇ ¼º´ÉÀ» º¸¿©ÁØ´Ù. UTF-8 ÀÎÄÚµùÀº ¿©´ü ¹è Á¤µµÀÇ Â÷À̸¦ º¸À̰í ÀÖ´Ù.
¶ÇÇÑ µð¹ö±ë ¸ðµå·Î ½ÇÇà½Ã ÄÚµå ÆíÁý(Ŭ·¡½º ³»ÀÇ Çʵå¿Í ¸Þ½îµå)°ú °è¼Ó ±â´ÉÀ» ÅëÇØ µð¹ö±ë ȯ°æÀÌ ´õ¿í °³¼±µÆÀ¸¸ç, CLR º¸¾È ¿ª½Ã °ÈµÆ´Ù. PKCS7°ú XML ¾ÏÈ£È ±â´ÉÀÌ Ãß°¡µÆÀ¸¸ç X509 ÀÎÁõÀÌ Ãß°¡µÆ´Ù. ±× ¿Ü¿¡µµ ±ÇÇÑ Çã°¡ °è»ê±â ±â´ÉÀÌ ClickOnce¿Í ÅëÇÕµÇ¾î »ç¿ëÇÒ ¼ö ÀÖ´Ù.
ÀÌ¿Í °°Àº º¯È°¡ ÀÖÁö¸¸ ´ÙÀ½¿¡ ¼Ò°³ÇÒ Á¦³Ê¸¯ ±â´ÉÀÌ °¡Àå Å« º¯ÈÀÌ¸ç ±â´É ¶ÇÇÑ °·ÂÇÏ´Ù ÇÒ ¼ö ÀÖ°Ú´Ù. Á¦³Ê¸¯ ±â´É¿¡ ´ëÇØ¼´Â Á» ´õ ÀÚ¼¼È÷ »ìÆìº¸°Ú´Ù.
Á¦³Ê¸¯
2002³â¿¡ ¿¸° OOPSLA(Object-Oriented Programming, Systems, Language, and Applications)¿¡¼ C#ÀÇ ¾Æ¹öÁöÀÎ Anders Hejlsberg°¡ ´ÙÀ½ ¹öÀüÀÇ C#¿¡ Ãß°¡µÉ »õ·Î¿î Ư¡µé·Î Á¦³Ê¸¯, ÀÍ¸í ¸Þ½îµå(anonymous method), ÀÌÅÍ·¹ÀÌÅÍ(iterator), Partial Types¿¡ ´ëÇØ À̾߱âÇß°í ÀÌ·¯ÇÑ ±â´ÉµéÀÌ C# 2.0(Generic C#)¿¡¼ ±¸ÇöµÆ´Ù(´å³Ý ÇÁ·¹ÀÓ¿öÅ© 1.¡¿¿¡¼µµ Á¦³Ê¸¯Àº ÀÌ¿ëÇÒ ¼ö ÀÖÀ¸¸ç ÀÌ´Â CLIX¶ó´Â À̸§À¸·Î ¹èÆ÷µÇ°í ÀÖ´Ù). Àá½Ã C#ÀÇ µðÀÚÀÎ ¸ñÇ¥¿¡ ´ëÇØ ¾Ë¾Æº¸ÀÚ. C#ÀÇ ´ëºÎºÐÀÇ ±â´ÉÀº ³× °¡Áö µðÀÚÀÎ ¸ñÇ¥¸¦ ±â¹ÝÀ¸·Î ¸¸µé¾îÁ³´Ù.
¡ß ¾ð¾î¿¡¼ °ª ¹× ÂüÁ¶ Çü½ÄÀ» »ç¿ëÇÏ´Â ¹æ½ÄÀ» °£¼ÒÈÇϸç ÅëÇÕµÈ Çü½ÄÀÇ ½Ã½ºÅÛ
¡ß XML ÁÖ¼®, Ư¼º, ¼Ó¼º, À̺¥Æ® ¹× µ¨¸®°ÔÀÌÆ®¿Í °°Àº ±â´ÉÀ» ÅëÇØ ±¸ÃàµÈ ±¸¼º ¿ä¼Ò ±â¹ÝÀÇ µðÀÚÀÎ
¡ß ¾ÈÀüÇÑ Æ÷ÀÎÅÍ Á¶ÀÛ, ¿À¹öÇ÷Π°Ë»ç µî°ú °°Àº C# ¾ð¾îÀÇ °íÀ¯ÇÑ ±â´ÉÀ» ÅëÇØ ±¸Ãà
¡ß °³¹ßÀÚÀÇ »ý»ê¼ºÀ» Çâ»ó½ÃŰ´Â ½Ç¿ëÀûÀÎ ¾ð¾î ±¸¹®(¿¹ : foreach, using ¸í·É¹®) »ç¿ë
±×·³ ÀÌÁ¦ ÀÌ ³× °¡Áö ¿ä¼Ò¿¡ ´ëÇØ Á¦³Ê¸¯À» Áß½ÉÀ¸·Î ¾Ë¾Æº¸°Ú´Ù.
 |
| <±×¸² 3> 2004³â »÷ µð¿¡°í(San Diego)¿¡¼ ÀÖ¾ú´ø Å×Å©¾Öµå 2004(TechEd 2004)¿¡¼ C#ÀÇ ¾Æ¹öÁöÀÎ Anders Hejlsberg¸¦ ¸¸³ª´Ù. |
Àç»ç¿ë¼º ³ôÀÎ Á¦³Ê¸¯
¾ÖÇø®ÄÉÀ̼ÇÀÇ º¹Àâµµ°¡ ½ÉÇØÁú¼ö·Ï °³¹ßÀÚ¿¡°Ô´Â ±âÁ¸ °´Ã¼ ±â¹Ý Äڵ带 ÃÖ´ëÇÑ ´Ù½Ã »ç¿ëÇØ¾ß ÇÒ ¹æ¹ýÀÌ Áß¿äÇØÁø´Ù. C# 2.0¿¡¼´Â Á¦³Ê¸¯À̶ó´Â ±â´ÉÀ» »ç¿ëÇÑ´Ù. C#¿¡´Â Çü½ÄÀÌ ¾ÈÀüÇÑ Á¦³Ê¸¯ÀÌ Æ÷ÇԵǾî ÀÖ´Ù. ÀÌ Á¦³Ê¸¯Àº C++ÀÇ ÅÛÇø´°ú À¯»çÇÏÁö¸¸ ±¸¹®ÀÌ ¾à°£ ´Ù¸£¸ç ±¸Çö ¹æ½Äµµ Å©°Ô ´Ù¸£´Ù.
C# 1.0¿¡¼ÀÇ Å¬·¡½º ÀÛ¼º
C# 1.0¿¡¼´Â °³¹ßÀÚ°¡ ±âº» °³Ã¼ Çü½ÄÀÇ ÀνºÅϽº¿¡ µ¥ÀÌÅ͸¦ ÀúÀåÇØ ¹Ì¾àÇÑ ±â´ÉÀÇ Á¦³Ê¸¯ Çü½ÄÀ» ¸¸µé ¼ö ÀÖ´Ù. C#ÀÇ ¸ðµç °³Ã¼´Â ±âº» °³Ã¼ Çü½Ä¿¡¼ »ó¼ÓµÇ°í ÅëÇÕµÈ ´å³Ý Çü½Ä ½Ã½ºÅÛÀÇ ¹Ú½Ì(boxing : ÀÚµ¿ º¯È¯) ¹× ¾ð¹Ú½Ì(unboxing) ±â´ÉÀÌ ÀÖÀ¸¹Ç·Î ÇÁ·Î±×·¡¸Ó´Â ÂüÁ¶ ¹× °ª Çü½Ä ¸ðµÎ¸¦ °³Ã¼ Çü½ÄÀÇ º¯¼ö¿¡ ÀúÀåÇÒ ¼ö ÀÖ´Ù.
ÇÏÁö¸¸ ÂüÁ¶ Çü½Ä, °ª Çü½Ä ¹× ±âº» °³Ã¼ Çü½Ä »çÀ̸¦ º¯È¯ÇÏ´Â µ¥ ½É°¢ÇÑ ¼º´É ÀúÇϰ¡ ¹ß»ýÇÏ°Ô µÈ´Ù. ÀÌ·¯ÇÑ ±â´ÉÀ» ¼³¸íÇϱâ À§ÇØ ¿¹¸¦ Çϳª µé¾î º¸°Ú´Ù. ´ÙÀ½ ¿¹´Â ¸¶ÀÌÅ©·Î¼ÒÇÁÆ® ¿¬±¸¼ÒÀÇ °ø½Ä Generics for C# ÆÀÀÇ È¨ÆäÀÌÁöÀÎ Gyro(
research.microsoft.com/projects/clrgen)¿¡ ÀÖ´Â Andrew Kennedy¿Í Don SymeÀÌ ÀÛ¼ºÇÑ ¡¸Design and Implementation of Generics for the .NET Common Language Runtime¡¹(
research.microsoft.com/projects/clrgen/generics.pdf)ÀÇ ¿¹¸¦ »ç¿ëÇß´Ù(<¸®½ºÆ® 1, 2>).
| <¸®½ºÆ® 1> °´Ã¼ ±â¹ÝÀÇ ½ºÅà ¿¹ | | | |
class Stack {
private object[] store;
private int size;
public Stack()
store=new object[10]; size=0;
}
public void Push(object x) {
if (size>=store.Size) {
object[] tmp = new object[size*2];
Array.Copy(store,tmp,size);
store = tmp;
}
store[size++] = x;
}
public object Pop() {
return store[--size];
}
public static void Main() {
Stack x = new Stack();
x.Push(17);
Console.WriteLine((int) x.Pop() == 17);
}
} | |
 |
| <¸®½ºÆ® 2> Á¦³Ê¸¯ ½ºÅà ¿¹ | | | |
class Stack<T> {
private T[] store;
private int size;
public Stack()
store=new T[10]; size=0;
}
public void Push(T x) {
if (size>=store.Size) {
T[] tmp = new T[size*2];
Array.Copy(store,tmp,size);
store = tmp;
}
store[size++] = x;
}
public T Pop() {
return store[--size];
}
public static void Main() {
Stack<int> x = new Stack<int>();
x.Push(17);
Console.WriteLine(x.Pop() == 17);
}
} | |
 |
¾ÕÀÇ Äڵ忡¼´Â Push ¹× PopÀÇ µÎ °¡Áö ÀÛ¾÷À» ¼öÇàÇÏ´Â °£´ÜÇÑ ½ºÅà Çü½ÄÀ» ¸¸µç´Ù. Stack Ŭ·¡½º´Â °³Ã¼ Çü½ÄÀÇ ¹è¿¿¡ ÇØ´ç µ¥ÀÌÅ͸¦ ÀúÀåÇϰí Push ¹× Pop ¸Þ½îµå´Â ±âº» °³Ã¼ Çü½ÄÀ» »ç¿ëÇÏ¿© °¢°¢ µ¥ÀÌÅ͸¦ ¹Þ°í ¹ÝȯÇÏ°Ô µÈ´Ù. »ç¿ëÀÚ ÁöÁ¤ Çü½ÄÀ» ½ºÅÿ¡ Ǫ½ÃÇÒ ¼ö ÀÖ´Ù.
ÇÏÁö¸¸ ÇÁ·Î±×·¥¿¡¼ µ¥ÀÌÅ͸¦ °Ë»öÇØ¾ß ÇÏ´Â °æ¿ì ±âº» °³Ã¼ Çü½ÄÀÎ Pop ¸Þ½îµåÀÇ °á°ú¸¦ ¸í½ÃÀûÀ¸·Î ij½ºÆÃÇØ¾ß ÇÑ´Ù. Á¤¼ö µî°ú °°Àº °ª Çü½ÄÀÌ Push ¸Þ½îµå¿¡ Àü´ÞµÇ¸é ·±Å¸ÀÓÀº ÀÌ Çü½ÄÀ» ÂüÁ¶ Çü½ÄÀ¸·Î ÀÚµ¿ º¯È¯(boxing)ÇÑ ´ÙÀ½ ³»ºÎ µ¥ÀÌÅÍ ±¸Á¶¿¡ ÀúÀåÇÑ´Ù.
Á¤¼ö µî°ú °°Àº °ª Çü½ÄÀ» ½ºÅÿ¡¼ °Ë»öÇÏ·Á¸é Pop ¸Þ½îµå¿¡¼ ¾òÀº °´Ã¼ Çü½ÄÀ» °ª Çü½Ä¿¡ ¸í½ÃÀûÀ¸·Î ij½ºÆÃ(unboxing)ÇØ¾ß ÇÑ´Ù. °ª ¹× ÂüÁ¶ Çü½Ä »çÀÌÀÇ ¹Ú½Ì ¹× ¾ð¹Ú½ÌÀº ƯÈ÷ ºÎ´ãµÇ´Â ÀÛ¾÷ÀÌ µÉ °ÍÀÌ´Ù.
C#ÀÇ Á¦³Ê¸¯Àº ³»ºÎ ¾Ë°í¸®ÁòÀÌ µ¿ÀÏÇÏ°Ô À¯ÁöµÇ°í ³»ºÎ µ¥ÀÌÅÍ Çü½ÄÀÌ ÃÖÁ¾ »ç¿ëÀÚ ¼³Á¤¿¡ µû¶ó ´Ù¸¦ ¼ö ÀÖµµ·Ï ¸Å°³ º¯¼ö ÀÖ´Â Çü½ÄÀ» ÅëÇØ ±¸ÇöÇÑ´Ù. ¸¸¾à C++ÀÇ ÅÛÇø´ ±â´ÉÀ» »ç¿ëÇØ º» µ¶ÀÚ¶ó¸é C++¿Í °ÅÀÇ µ¿ÀÏÇÑ ¹æ½ÄÀ¸·Î C#ÀÇ Á¦³Ê¸¯ÀÌ ¼±¾ðµÇ¹Ç·Î ½±°Ô ÀÌÇØÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ÀϹÝÀûÀ¸·Î ±âÁ¸ Ŭ·¡½º ¹× ±¸Á¶¿Í ¶È°°ÀÌ ¸¸µé ¼ö ÀÖÀ¸¸ç ²ª¼è °ýÈ£ Ç¥±â¹ý(< ¹× >)À» »ç¿ëÇÏ¿© Çü½Ä ¸Å°³ º¯¼ö¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. ±×·¸´Ù¸é ½ÇÁ¦ À§ÀÇ µÎ Äڵ尡 IL ÄÚµå·Î´Â ¾î¶»°Ô ´Ù¸¥Áö Çѹø »ìÆìº¸°Ú´Ù(<¸®½ºÆ® 3, 4>).
| <¸®½ºÆ® 3> °´Ã¼ ±â¹ÝÀÇ ½ºÅà IL ÄÚµå | | | |
.class Stack {
.field private class System.Object[] store
.field private int32 size
.method public void .ctor() {
ldarg.0
call void System.Object::.ctor()
ldarg.0
ldc.i4 10
newarr System.Object
stfld class System.Object[] Stack::store
ldarg.0
ldc.i4 0
stfld int32 Stack::size
ret
}
.method public void Push(class System.Object x) {
.maxstack 4
.locals (class System.Object[], int32)
.
.
.
ldarg.0
ldfld class System.Object[] Stack::store
ldarg.0
dup
ldfld int32 Stack::size
dup
stloc.1
ldc.i4 1
add
stfld int32 Stack::size
ldloc.1
ldarg.1
stelem.ref
ret
}
.method public class System.Object Pop() {
.maxstack 4
ldarg.0
ldfld class System.Object[] Stack::store
ldarg.0
dup
ldfld int32 Stack::size
ldc.i4 1
sub
dup
stfld int32 Stack::size
ldelem.ref
ret
}
.method public static void Main() {
.entrypoint
.maxstack 3
.locals (class Stack)
newobj void Stack::.ctor()
stloc.0
ldloc.0
ldc.i4 17
box System.Int32
call instance void Stack::Push(class System.Object)
ldloc.0
call instance class System.Object Stack::Pop()
unbox System.Int32
ldind.i4
ldc.i4 17
ceq
call void System.Console::WriteLine(bool)
ret
}
} | |
 |
| <¸®½ºÆ® 4> Á¦³Ê¸¯ ½ºÅà IL ÄÚµå | | | |
.class Stack<T> {
.field private !0[] store
.field private int32 size
.method public void .ctor() {
ldarg.0
call void System.Object::.ctor()
ldarg.0
ldc.i4 10
newarr !0
stfld !0[] Stack<!0>::store
ldarg.0
ldc.i4 0
stfld int32 Stack<!0>::size
ret
}
.method public void Push(!0 x) {
.maxstack 4
.locals (!0[], int32)
.
.
.
ldarg.0
ldfld !0[] Stack<!0>::store
ldarg.0
dup
ldfld int32 Stack<!0>::size
dup
stloc.1
ldc.i4 1
add
stfld int32 Stack<!0>::size
ldloc.1
ldarg.1
stelem.any !0
ret
}
.method public !0 Pop() {
.maxstack 4
ldarg.0
ldfld !0[] Stack<!0>::store
ldarg.0
dup
ldfld int32 Stack<!0>::size
ldc.i4 1
sub
dup
stfld int32 Stack<!0>::size
ldelem.any !0
ret
}
.method public static void Main() {
.entrypoint
.maxstack 3
.locals (class Stack<int32>)
newobj void Stack<int32>::.ctor()
stloc.0
ldloc.0
ldc.i4 17
call instance void Stack<int32>::Push(!0)
ldloc.0
call instance !0 Stack<int32>::Pop()
ldc.i4 17
ceq
call void System.Console::WriteLine(bool)
ret
}
} | |
 |
IL ÄÚµå ³»¿¡¼ ¸í½ÃÀûÀ¸·Î Çü½ÄÀ» »ç¿ëÇØ ÁÜÀ¸·Î½á ÇÊ¿ä ¾ø´Â ¹Ú½Ì°ú ¾ð¹Ú½ÌÀ» ÁÙ¿© ÁÖ°í ÀÖ´Â °ÍÀÌ È®¿¬È÷ ±¸ºÐµÉ °ÍÀÌ´Ù. Generic Ŭ·¡½º°¡ ÄÄÆÄÀϵǸé ÀÌ Å¬·¡½º´Â ÀÏ¹Ý Å¬·¡½º¿Í ½ÇÁ¦·Î Â÷À̰¡ ¾ø´Ù. °á°ú´Â ¸ÞŸ µ¥ÀÌÅÍ ¹× Áß°£ ¾ð¾î(IL)ÀÏ »ÓÀÌ´Ù. Á¦³Ê¸¯ Çü½ÄÀÇ ILÀº Á¦°øµÈ Çü½Ä ¸Å°³ º¯¼ö°¡ °ª Çü½Ä ¶Ç´Â ÂüÁ¶ Çü½ÄÀÎÁö¿¡ µû¶ó ´Ù¸£´Ù.
À̿ܿ¡µµ Á¦³Ê¸¯ Çü½ÄÀº ´Ù¾çÇÑ ¸Å°³ º¯¼ö¸¦ Áö¿øÇÏ¸ç ¾ÖÇø®ÄÉÀ̼ǿ¡¼ Çü½Ä ¸Å°³ º¯¼öÀÇ ¸â¹ö¸¦ »ç¿ëÇÏ¿© ÇÁ·Î±×·¥ÀÇ Á¦³Ê¸¯ Çü½Ä ³»¿¡¼ ¸í·É¹®À» ½ÇÇàÇϵµ·Ï Á¦¾à Á¶°ÇÀ» ÁÖ´Â °Íµµ °¡´ÉÇÏ´Ù. ±×·³ C#ÀÇ Á¦³Ê¸¯°ú ´Ù¸¥ ¾ð¾îÀÇ Â÷À̸¦ Çѹø ¾Ë¾Æº¸°Ú´Ù.
C++ ÅÛÇø´Àº C# Á¦³Ê¸¯°ú´Â Ç¥Çö Çü½ÄÀº ºñ½ÁÇÏÁö¸¸ ½ÇÁ¦´Â ÇöÀúÈ÷ ´Ù¸£´Ù. C# Á¦³Ê¸¯Àº IL·Î ÄÄÆÄÀϵǹǷΠ°¢°¢ÀÇ °ª Çü½Ä¿¡ ´ëÇØ¼´Â ·±Å¸ÀÓ¿¡, ÂüÁ¶ Çü½Ä¿¡ ´ëÇØ¼´Â ÇÑ ¹ø¸¸ ¹ß»ýÇÏ°Ô µÈ´Ù. C++ ÅÛÇø´Àº ÅÛÇø´¿¡ Á¦°øµÈ °¢ Çü½Ä ¸Å°³ º¯¼ö¿¡ ´ëÇÑ Æ¯¼öÈµÈ Çü½ÄÀ» »ý¼ºÇÏ´Â ÄÚµå È®Àå ¸ÅÅ©·Î´Ù. µû¶ó¼ C++ ÄÄÆÄÀÏ·¯´Â Á¤¼öÀÇ ½ºÅðú °°Àº ÅÛÇø´À» ¹ß°ßÇÏ¸é ±âº» Çü½ÄÀ¸·Î¼ Á¤¼ö¸¦ ³»ºÎÀûÀ¸·Î Æ÷ÇÔÇÏ´Â Stack Ŭ·¡½º·Î ÅÛÇø´ Äڵ带 È®ÀåÇÑ´Ù.
Çü½Ä ¸Å°³ º¯¼ö°¡ °ª ¶Ç´Â ÂüÁ¶ Çü½Ä¿¡ °ü°è¾øÀÌ ÄÚµå ¾çÀ» °¨¼Ò½Ãų ¼ö ÀÖµµ·Ï ¸µÄ¿¸¦ µðÀÚÀÎÇÏÁö ¾ÊÀ¸¸é C++ ÄÄÆÄÀÏ·¯´Â ¸Å¹ø Ư¼öÈµÈ Å¬·¡½º¸¦ ¸¸µç´Ù. µû¶ó¼ C# Á¦³Ê¸¯¿¡ ºñÇØ ÄÚµå ¾çÀÌ »ó´çÈ÷ Áõ°¡ÇÑ´Ù. ±×¸®°í C++ ÅÛÇø´¿¡¼´Â Á¦¾à Á¶°ÇÀ» Á¤ÀÇÇÒ ¼ö ¾ø´Ù. ±×·¸Áö¸¸ C++ ÅÛÇø´Àº ±× ÀÚÀ¯·Î¿òÀ̳ª ´Ù¾çÇÔ¿¡¼ °í±Þ C++ °³¹ßÀÚµéÀÇ ÃѾָ¦ ¹Þ°í ÀÖ´Ù. C# Á¦³Ê¸¯Àº À§¿¡¼ À̾߱âÇÑ C#ÀÇ µðÀÚÀÎ ¸ñÇ¥¸¦ Ãæ½ÇÈ÷ ÀÌÇàÇÏ¸é¼ C++ÀÇ ÅÛÇø´º¸´Ù ÅëÇÕµÇ°í ½Ç¿ëÀûÀÎ ¸ð½ÀÀ¸·Î ±¸ÇöµÆ´Ù.
ÀÚ¹ÙÀÇ °æ¿ì´Â JDK 5.0¿¡¼ Á¦³Ê¸¯ ±â´ÉÀ» Ãß°¡Çϱâ·Î ÇßÁö¸¸ ¼º´É ¹®Á¦¸¦ ¾î¶»°Ô ±Øº¹ÇÒ °ÍÀÎÁö°¡ °ü°ÇÀÌ µÉ °Í °°´Ù. ±×¸®°í Á¶±Ý ´ÊÀº °¨ÀÌ ÀÖÁö¸¸ JDK 5.0¿¡´Â C#¿¡¼ º¼ ¼ö ÀÖ´Â ¹Ú½Ì°ú °°Àº ±â´ÉÀÌ Ãß°¡·Î µé¾î°¡¸ç, ADO.NETÀÇ DataSet°ú °°Àº ºñ¿¬°áÁöÇâÀûÀÎ DataSet ¶ÇÇÑ Ãß°¡ÇÑ´Ù°í ÇÑ´Ù.
´å³Ý 2.0¿¡¼´Â C# À̿ܵµ VB.NET°ú ¸Å´ÏÁöµå C++¿¡¼µµ Á¦³Ê¸¯ ±â´ÉÀ» Áö¿øÇϰí ÀÖ´Ù. ±× ¿ÜÀÇ Á¦³Ê¸¯ÀÇ ÀåÁ¡À¸·Î´Â ´ÙÀ½°ú °°Àº ¿ä¼ÒµéÀ» µé ¼ö ÀÖ´Ù.
¡ß ÄÚµå ÀÛ¼º, Å×½ºÆ® ¹× ¹èÆ÷¸¦ ÇÑ ¹ø¿¡ ¼öÇàÇÒ ¼ö ÀÖÀ¸¹Ç·Î ´Ù¾çÇÑ µ¥ÀÌÅÍ Çü½Ä¿¡ ÇØ´ç Äڵ带 Àç»ç¿ëÇÒ ¼ö ÀÖ´Ù.
¡ß Á¦³Ê¸¯Àº ÄÄÆÄÀϽà °Ë»çµÈ´Ù. ÇÁ·Î±×·¥ÀÌ Á¦°øµÈ Çü½Ä ¸Å°³ º¯¼ö·Î generic Ŭ·¡½º¸¦ ÀνºÅϽºÈÇÏ´Â °æ¿ì Çü½Ä ¸Å°³ º¯¼ö´Â ÇÁ·Î±×·¥¿¡¼ Ŭ·¡½º Á¤ÀÇ¿¡ ÁöÁ¤ÇÑ Çü½ÄÀ¸·Î¸¸ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
¡ß Á¦³Ê¸¯ ±¸ÇöÀº ´Ù¸¥ Çü½ÄÀÇ ±¸Çö°ú ºñ±³ÇØ º¸¸é ÄÚµå ¾çÀ» °¨¼Ò½ÃŲ´Ù. Á¦³Ê¸¯À¸·Î Çü½ÄÈµÈ Ä÷º¼ÇÀ» ¸¸µé¸é °¢ Ŭ·¡½ºÀÇ Æ¯Á¤ ¹öÀüÀ» ¸¸µé Çʿ䰡 ¾øÀ¸¸ç ¼º´ÉÀ» ±×´ë·Î À¯ÁöÇÒ ¼ö ÀÖ´Ù.
¡ß Äڵ带 ´õ ½±°Ô ÀÐÀ» ¼ö ÀÖ´Ù.
À̿ܿ¡µµ BCL(Base Class Library)¿¡¼ÀÇ Generic Ä÷º¼Ç¿¡ ´ëÇØ ¾Ë¾Æº¸µµ·Ï ÇϰڴÙ. BCL¿¡¼´Â ´ÙÀ½°ú °°ÀÌ ÀÌ¹Ì ±¸ÇöµÈ Ŭ·¡½º¿Í ÀÎÅÍÆäÀ̽º¸¦ Á¦°øÇϰí ÀÖ´Ù.
¡ß System.Collections.Generic Ŭ·¡½º : List<T>, Dictionary<K, V>, Stack<T>, Queue<T>
¡ß System.Collections.Generic ÀÎÅÍÆäÀ̽º : IList<T>, IDictionary<K, V>, ICollection<T>, IEnumerable<T>, IEnumerator<T>, IComparable<T>, IComparer<T>
ÀÌÅÍ·¹ÀÌÅÍ
ÀÌÅÍ·¹ÀÌÅÍ´Â ÇØ´ç ¿ä¼Ò¿¡¼ foreach ¹®ÀÌ ¹Ýº¹µÇ´Â ¹æ½ÄÀ» Çü½ÄÀÌ °£´ÜÇÏ°Ô ¼±¾ðÇÒ ¼ö ÀÖ°Ô ¸¸µé¾î ÁÖ´Â °ÍÀ¸·Î ÀÌÅÍ·¹ÀÌÅÍ´Â foreach ·çÇÁ ±¸¹®ÀÇ ³í¸®Àû ±¸¹®À¸·Î foreach Ű¿öµå ´ÙÀ½¿¡ ¿©´Â °ýÈ£ ¹× ´Ý´Â °ýÈ£¸¦ »ç¿ëÇÏ¿© ÇÔ¼ö¿Í À¯»çÇÏ°Ô Á¤ÀǵȴÙ.
ÀÌÅÍ·¹ÀÌÅÍ´Â ÇÁ·Î±×·¥ ´ë½Å¿¡ ¿°ÅÀÚ ÆÐÅÏÀ» ±¸ÇöÇÏ¿© ¹ø°Å·Î¿î ÀÛ¾÷À» ó¸®ÇÑ´Ù. Ŭ·¡½º¸¦ ¸¸µé°í »óÅ ½Ã½ºÅÛÀ» ÀÛ¼ºÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó C# ÄÄÆÄÀÏ·¯´Â ¿°ÅÀÚ ÆÐÅÏÀ» »ç¿ëÇÏ¿© ÀÌÅÍ·¹ÀÌÅÍ¿¡ ÀÛ¼ºÇÑ Äڵ带 ÀûÀýÇÑ Å¬·¡½º ¹× ÄÚµå·Î º¯È¯ÇÑ´Ù. ÀÌ·¸°Ô ÇÔÀ¸·Î½á ÀÌÅÍ·¹ÀÌÅÍ´Â °³¹ßÀÚÀÇ »ý»ê¼ºÀ» »ó´çÈ÷ ³ô¿©ÁØ´Ù.
ÀÍ¸í ¸Þ½îµå
ÀÍ¸í ¸Þ½îµå´Â À¯¿ëÇÑ ¾ð¾î ±¸¹®À¸·Î ÇÁ·Î±×·¡¸Ó´Â µ¨¸®°ÔÀÌÆ®¿¡ ĸ½¶ÈÇÏ°í ³ªÁß¿¡ ¼öÇàÇÒ ¼ö ÀÖ´Â ÄÚµå ºí·ÏÀ» ¸¸µé ¼ö ÀÖ´Ù. ÀÌ ¸Þ½îµå´Â lambda¶ó´Â ÇÔ¼öÇü ¾ð¾îÀÇ °³³äÀ» ±â¹ÝÀ¸·Î Çϸç LISP ¹× ÆÄÀ̽ã°ú °³³äÀûÀ¸·Î ºñ½ÁÇÏ´Ù.
µ¨¸®°ÔÀÌÆ®´Â ¸Þ½îµå¸¦ ÂüÁ¶ÇÏ´Â °´Ã¼·Î C¿¡¼ À̾߱âÇÏ´Â ÇÔ¼ö Æ÷ÀÎÅÍ´Ù. µ¨¸®°ÔÀÌÆ®°¡ ½ÇÇàµÉ ¶§¸¶´Ù ÀÌ µ¨¸®°ÔÀÌÆ®°¡ ÂüÁ¶ÇÏ´Â ¸Þ½îµå°¡ È£ÃâµÈ´Ù. º°µµÀÇ ÇÔ¼ö°¡ ¸¸µé¾îÁö°í µ¨¸®°ÔÀÌÆ®¿¡ ÀÇÇØ ÂüÁ¶µÇ°í µ¨¸®°ÔÀÌÆ®°¡ È£ÃâµÉ ¶§¸¶´Ù ÇÁ·Î±×·¥ÀÌ ÇØ´ç ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. ÇÔ¼ö ³»¿¡¼ ÀÏ·ÃÀÇ ½ÇÇà ´Ü°è°¡ ¼öÇàµÈ´Ù.
ÀÍ¸í ¸Þ½îµå¸¦ Ãß°¡Çϸé ÇÁ·Î±×·¥Àº Ŭ·¡½º¿¡ ´ëÇØ ¿ÏÀüÈ÷ »õ·Î¿î ¸Þ½îµå¸¦ ¸¸µé ¼ö ÀÖÀ¸¸ç µ¨¸®°ÔÀÌÆ®¿¡¼ ±× ¾È¿¡ Æ÷ÇÔµÈ ½ÇÇà ´Ü°è¸¦ Á÷Á¢ ÂüÁ¶ÇÒ ¼ö ÀÖ´Ù. ÀÍ¸í ¸Þ½îµå´Â ½ÇÇà ¿µ¿ªÀ» ³ªÅ¸³»´Â Áß°ýÈ£ ½ÖÀÌ ÀÖ´Â ÀνºÅϽºÈ ¹®°ú ¸í·É¹® ´ÙÀ½¿¡ µ¨¸®°ÔÀÌÆ®¸¦ ÀνºÅϽºÈÇÏ¿© ¼±¾ðÇÑ´Ù.
 | µ¥ÀÌÅÍ Áß½ÉÀû ºÐ»ê ÇÁ·Î±×·¡¹ÖÀ» À§ÇÑ ¾ð¾î C¥ø |  | |  | |
| C¥ø(ÄÚ¸Þ°¡, COmega, research.microsoft.com/Comega)´Â ½ÇÇè½Ç ¾ð¾îÀÌÁö¸¸ ÇöÀç ÄÄÆÄÀÏ·¯¸¦ ±¸ÇØ »ç¿ëÇÒ ¼ö ÀÖ´Ù. C¥ø´Â ±Ù·¡ÀÇ ´ëÇ¥Àû ÇÁ·Î±×·¡¹Ö ºÐ¾ßÀÎ µ¥ÀÌÅÍ Áß½ÉÀûÀÎ ºÐ»ê ÇÁ·Î±×·¥À» À§ÇÑ µ¥ÀÌÅÍ ±¸Á¶¿Í Á¦¾î ±¸Á¶¸¦ Á¦°øÇϱâ À§ÇØ ¼³°èµÆÀ¸¸ç, µ¿±âÀû ȤÀº ºñµ¿±âÀû ¸Þ½îµå¸¦ Áö¿øÇϸç, ¾ð¾î¿¡ µ¥ÀÌÅÍ ÁöÇâÀûÀÎ ±â´ÉÀÌ Æ÷ÇԵǾî ÀÖ´Ù. C¥ø°¡ C#À̳ª ´å³ÝÀÇ ¾ð¾î¿¡ ¾î¶² ÇüÅ·Π¹Ý¿µÀÌ µÉÁö´Â ÇöÀç·Î¼´Â ¹ÌÁö¼öÀ̸ç, ¾ÕÀ¸·Î ÁöÄѺÁ¾ß ÇÒ °Í °°´Ù.
| | | | | |
| |
ÀÍ¸í ¸Þ½îµå´Â Ŭ·¡½º¿¡¼ ¼±¾ðÇÑ º¯¼ö»Ó¸¸ ¾Æ´Ï¶ó Ŭ·¡½º°¡ »óÁÖÇÏ´Â ¸Þ½îµå¿¡ ¼±¾ðµÈ Áö¿ª º¯¼ö ¶Ç´Â ¸Å°³ º¯¼ö¸¦ ÂüÁ¶ÇÒ ¼ö ÀÖ´Ù. ¶ÇÇÑ ÀÍ¸í ¸Þ½îµå ¹®Àº sender ¹× e¶ó´Â ¸Å°³ º¯¼ö µÎ °³¸¦ Æ÷ÇÔÇÑ´Ù. À©µµ¿ì ÆûÀÇ Button ÄÁÆ®·Ñ Ŭ·¡½ºÀÇ Click µ¨¸®°ÔÀÌÆ®ÀÇ Á¤ÀǸ¦ ã¾Æº¸¸é µ¨¸®°ÔÀÌÆ®°¡ ÂüÁ¶ÇÏ´Â ¸ðµç ÇÔ¼ö´Â ù ¹øÂ°´Â Çü½Ä °´Ã¼, µÎ ¹øÂ°´Â EventArgs Çü½ÄÀÎ ¸Å°³ º¯¼ö µÎ °³¸¦ Æ÷ÇÔÇØ¾ß ÇÑ´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù.
ÀÍ¸í µ¨¸®°ÔÀÌÆ®°¡ ¹ß°ßµÇ¸é C# ÄÄÆÄÀÏ·¯´Â ÇØ´ç ½ÇÇà ¹üÀ§ÀÇ Äڵ带 °íÀ¯ÇÑ À̸§ÀÇ Å¬·¡½º ³»¿¡¼ °íÀ¯ÇÑ À̸§ÀÇ ÇÔ¼ö·Î ÀÚµ¿ º¯È¯ÇÑ´Ù. ÄÚµå ºí·Ï¿¡ ÀÖ´Â µ¨¸®°ÔÀÌÆ®°¡ ÀúÀåµÈ ´ÙÀ½ ÂüÁ¶(ÄÄÆÄÀÏ·¯°¡ »ý¼ºÇÑ °³Ã¼ ¹× ¸Þ½îµå)·Î ¼³Á¤µÈ´Ù. µ¨¸®°ÔÀÌÆ®°¡ È£ÃâµÇ¸é ÀÍ¸í ¸Þ½îµå ºí·ÏÀº ÄÄÆÄÀÏ·¯°¡ »ý¼ºÇÑ ¸Þ½îµå¸¦ ÅëÇØ ½ÇÇàÇÏ°Ô µÈ´Ù.
Partial Types
Partial Types¸¦ »ç¿ëÇÏ¸é ´ë·®ÀÇ ¼Ò½º Äڵ带 ¿©·¯ °³ÀÇ ´Ù¸¥ ¼Ò½º ÆÄÀÏ·Î ³ª´ ¼ö ÀÖ´Ù. ¶ÇÇÑ ½Ã½ºÅÛÀÌ »ý¼ºÇÑ Çü½Ä°ú »ç¿ëÀÚ°¡ ÀÛ¼ºÇÑ Çü½ÄÀ» ºÐ¸®ÇÒ ¼ö ÀÖÀ¸¹Ç·Î µµ±¸¿¡¼ »ý¼ºÇÑ Äڵ带 °£´ÜÇÏ°Ô º¸ÃæÇϰųª ¼öÁ¤ÇÒ ¼ö ÀÖ´Ù.
´ÙÀ½¿¡ ³ªÅ¸³¯ »õ·Î¿î ±â¼úÀº ¾î¶² °ÍÀϱî
Áö±Ý±îÁö °£·«ÇϰԳª¸¶ ´å³Ý 2.0ÀÇ »õ·Î¿î ±â´É°ú ´å³Ý 2.0¿¡¼ÀÇ ¾ð¾îÀÇ º¯È¿¡ ´ëÇØ »ìÆìºÃ´Ù. ¾ð¾î³ª °³¹ß ȯ°æ ¶ÇÇÑ À¯±âü¿Í °°¾Æ¼ Áö¼ÓÀûÀ¸·Î º¯ÈÇÏ¸ç ¸ð¹æÀ» ÅëÇØ »õ·Ó°Ô ÁøÈÇØ ³ª°£´Ù´Â °ÍÀ» º¼ ¼ö ÀÖ´Ù. °á±¹ ÀÌ·¯ÇÑ º¯È¿¡ ´ëÀÀÇÏÁö ¸øÇÏ°Ô µÇ¸é ¾ø¾îÁöÁö´Â ¾ÊÁö¸¸ ´ëÁß°ú ¸Ö¾îÁö´Â °ú°ÅÀÇ ±â¼ú·Î Àü¶ôÇÒ ¼ö¹Û¿¡ ¾ø´Â °ÍÀÌ´Ù. Áö±Ý ¿¹ÃøÇϱ⿡´Â ¹«¸®°ÚÁö¸¸ ±×·³ ±× ´ÙÀ½ º¯È´Â ¾î¶»°Ô ¿Ã °ÍÀÎÁö ÇÑ ¹ø »ý°¢ÇØ º¸´Â °Íµµ Àç¹ÌÀÖÀ» °ÍÀÌ´Ù. @
* ÀÌ ±â»ç´Â ZDNet KoreaÀÇ Á¦ÈÞ¸ÅüÀÎ ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®¿þ¾î¿¡ °ÔÀçµÈ ³»¿ëÀÔ´Ï´Ù.