°Á Àü Å¿ÀÀÇ Àâ´ã>
À̹ø °Á´ Å¿À »çÀÌÆ®ÀÇ ¸â¹öÀÌÀÚ, Microsoft MVPÀÎ ±è °æ±Õ´ÔÀÌ Á¦°øÇÏ´Â C# 3.0¿¡ °üÇÑ À̾߱âÀÔ´Ï´Ù.
ASP.NET°ú C#Àº ¶¿·¡¾ß ¶¿ ¼ö ¾ø´Â °ü°èÀ̰í, ¶ÇÇÑ ASP.NET 3.5ÀÇ ´Ù¾çÇÑ ±â´ÉµéÀº C# 3.0¿¡ Ãß°¡µÈ
´Ù¾çÇÑ ±â´Éµé(À͸í ŸÀÔ, ŸÀÔ À¯Ãß, ¶÷´Ù Ç¥Çö½Ä µî)À» ±ä¹ÐÇÏ°Ô »ç¿ëÇϰí ÀÖÀ¸¹Ç·Î
ÀÌ¿¡ ´ëÇØ ÀÌÇØ¸¦ Çϰí ÀÖÀ¸¸é ¸¹Àº µµ¿òÀÌ µË´Ï´Ù.
ÇØ¼, ÀÌÀü °Á¿¡ °£·«ÇÏ°Ô ¿Ã¶ó¿Ô´ø ÀÌ °¢°¢ÀÇ »õ·Î¿î ±â´ÉµéÀ» Á¶±Ý ´õ ±¸Ã¼ÀûÀ̰í ÀÌÇØÇϱ⠽±°Ô
Ç®¾î´Þ¶ó°í °æ±Õ´Ô¿¡°Ô ¿äûÀ» µå·È°í, ÈçÄèÈ÷ Çã¶ôÇÏ¿© °Á°¡ ¿¬ÀçµÉ ¿¹Á¤ÀÔ´Ï´Ù.
LINQ¸¦ ÀÌÇØÇÔ¿¡ À־µ, ASP.NET MVC¸¦ ÀÌÇØÇÔ¿¡ À־µ »çÀü Áö½ÄÀ¸·Î ÇÊ¿äÇÑ ÀÌ ³»¿ëÀ»
²À ¼÷ÁöÇÏ½Ã±æ ±ÇÇØµå·Á º¾´Ï´Ù.~
C# 3.0ÀÇ »õ·Î¿î ±â´É(part1: varŰ¿öµå¸¦ »ç¿ëÇÑ Å¸ÀÔÀ¯Ãß)
C#3.0ÀÌ µîÀå ÇÏ¸é¼ ¿©·¯ °¡Áö »õ·Î¿î ±â´ÉÀÌ Ãß°¡ µÇ¾ú½À´Ï´Ù.
ŸÀÔÀ¯Ãß, À͸íŸÀÔ, ¶÷´Ù Ç¥Çö½Ä, °³Ã¼/Ä÷º¼Ç ÃʱâÈ, Nullable ŸÀÔ, È®Àå ¸Þ¼µå, Äõ¸® Ű¿öµå,
ÀÚµ¿À¸·Î ±¸ÇöµÈ ¼Ó¼º(Automatic Property, ºÎºÐ ¸Å¼µå(partial method) µîµî »ó´çÈ÷ ¸¹Àº »õ·Î¿î ±â´ÉµéÀÌ Ãß°¡ µÇ¾ú½À´Ï´Ù.
ÀÌ ±â´É Áß ´ëºÎºÐÀÇ ±â´ÉÀº LINQÀÇ ±â¹ÝÀÌ µÇ¸ç LINQ¸¦ ¹è¿ì±â ÀÌÀü¿¡ ¸ÕÀú ÇнÀÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.
À̹ø °Á¸¦ ½ÃÀÛÀ¸·Î ¾Õ¿¡¼ ¾ð±ÞÇÑ »õ·Î¿î ±â´É Áß LINQÀÇ ±â¹ÝÀÌ µÇ´Â »õ·Î¿î ±â´Éµé¿¡ ´ëÇØ °Á¸¦ ¿¬Àç ÇÏ·Á°í ÇÕ´Ï´Ù.
¾ðÁ¦ °Á°¡ ¸¶¹«¸® µÉÁö È®½ÇÇÏÁö´Â ¾ÊÁö¸¸ ÃÖ´ëÇÑ ÁÖ±âÀûÀ¸·Î °Á¸¦ ¿¬ÀçÇϰí ÃÖ´ëÇÑ ºü¸¥ ½Ã°£ ¾È¿¡ ¸¶¹«¸® Çϵµ·Ï ³ë·ÂÇϰڽÀ´Ï´Ù.
C# 3.0ºÎÅÍ Áö¿ª º¯¼öÀÇ Å¸ÀÔÀ» ¹Ýµå½Ã ¸í½ÃÀûÀ¸·Î ÁöÁ¤ÇØÁÙ ÇÊ¿ä ¾øÀÌ varŰ¿öµå¸¦ »ç¿ëÇÏ¿©
ÄÄÆÄÀÏ·¯°¡ ŸÀÔÀ» À¯ÃßÇÒ ¼ö ÀÖµµ·Ï ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ´Â µÚ¿¡¼ ¹è¿ì°Ô µÉ ¸í½ÃÀûÀ¸·Î ŸÀÔÀ» ÁöÁ¤ÇÏÁö ¾Ê´Â
À͸í ŸÀÔÀ̳ª °¡µ¶¼ºÀÌ ¶³¾îÁö´Â ÁßøµÈ Á¦³×¸¯(¿¹: IEnumerable<IEnumerable<Product>>) °ú °°ÀÌ
Ư¼öÇÑ °æ¿ì¿¡ varŰ¿öµå¸¦ »ç¿ëÇÏ¿© Á»´õ °£´ÜÇÏ°Ô Å¸ÀÔÀ» Ç¥ÇöÇÒ ¼ö ÀÖ½À´Ï´Ù.
´Ù¸¥ °³¹ßÀÚ°¡ Äڵ带 º¸¾ÒÀ» ¶§ ÀÌÇØ ÇÒ ¼ö ÀÖ´Â ¼öÁØÀ¸·Î ÀÛ¼ºÀÌ µÇ¸é
varŰ¿öµå¸¦ ÅëÇÑ Å¸ÀÔ À¯Ãß´Â Á»´õ °£°áÇÑ Äڵ带 ¸¸µé¾î ³¾ ¼ö ÀÖ´Â ÈǸ¢ÇÑ ±â´ÉÀ̶ó ÇÒ ¼ö ÀÖ°Ú½À´Ï´Ù.
1. ŸÀÔÀ¯Ãß´Â ¾î¶»°Ô ÀÌ·ç¾î Áö´Â°¡?
varŰ¿öµå´Â º¯¼ö¸¦ ¼±¾ðÇÏ°í ±× °ªÀ» ÇÒ´çÇÏ´Â ÃʱâÈ ±¸¹®¿¡¼ '='À» ±âÁØÀ¸·Î
¿À¸¥ÂÊ ºÎºÐÀÇ ÇüÅ¿¡ µû¶ó ÄÄÆÄÀÏ·¯¿¡°Ô ŸÀÔÀ¯Ã߸¦ Áö½Ã ÇÏ°Ô µË´Ï´Ù.
var i = 5
À§ÀÇ Äڵ带 º¸¸é 5¶ó´Â °ªÀÌ º¯¼ö i¿¡ ÇÒ´çµÇ¹Ç·Î ÄÄÆÄÀÏ·¯´Â 5¶ó´Â °ªÀÌ ¼ýÀÚ Áï
intŸÀÔÀ̶ó´Â °ÍÀ» ¹Ì¸® ¾Ë°í Àֱ⠶§¹®¿¡ º¯¼ö i¸¦ intŸÀÔÀ¸·Î À¯ÃßÇÏ°Ô µÇ´Â °Í ÀÔ´Ï´Ù.
//stringŸÀÔÀ¸·Î À¯Ãß
var s = "Taeyo.NET";
//doubleŸÀÔÀ¸·Î À¯Ãß
var d = 12.5;
//charŸÀÔÀ¸·Î À¯Ãß
var c = 'k';
C#ÀÇ ±âº» ŸÀÔ »Ó¸¸ ¾Æ´Ï¶ó »ç¿ëÀÚ Á¤ÀÇ Å¸ÀÔ(Class) ¹× À͸í ŸÀÔ(Anonymouse Type) ¶ÇÇÑ À¯Ãß µÉ ¼ö ÀÖ½À´Ï´Ù.
±×·³ °£´ÜÇÏ°Ô »ç¿ëÀÚ Á¤ÀÇ Å¸ÀÔ(Class)À» À¯ÃßÇÏ´Â Äڵ带 »ìÆì º¸µµ·Ï ÇϰڽÀ´Ï´Ù.
Class Person
{
public string FirstName;
public string LastName;
public int Age;
}
Person person = new Person();
person.FirstName = "°æ±Õ";
person.LastName = "±è";
person.Age = 19;
//»ç¿ëÀÚ ÁöÁ¤ ŸÀÔÀ¸·Î À¯Ãß
var p = person;
PersonÀ̶ó´Â »õ·Î¿î Class¸¦ ¸¸µé°í °³Ã¼¸¦ »ý¼ºÇÑ ÈÄ var Ű¿öµå·Î ¼±¾ðµÈ p¶ó´Â º¯¼ö¿¡ person°³Ã¼¸¦
ÇÒ´çÇÏ°Ô µÇ¸é ÄÄÆÄÀÏ·¯¿¡ ÀÇÇØ º¯¼ö p´Â PersonŸÀÔÀ¸·Î À¯Ãß µË´Ï´Ù.
À͸í ŸÀÔ ¶ÇÇÑ ÄÄÆÄÀÏ·¯¿¡ ÀÇÇØ À¯Ãß°¡ °¡´É ÇÕ´Ï´Ù.
¾Æ·¡ Äڵ带 º¸¸é ½ÄÀÇ ¿À¸¥ÂÊ ºÎºÐÀÌ À͸í ŸÀÔÀÌ°í ±× Å¸ÀÔÀ» º¯¼ö p°¡ ¹Þ°Ô µÇ¸é ÄÄÆÄÀÏ·¯¿¡ ÀÇÇØ º¯¼ö p´Â À͸í ŸÀÔÀ¸·Î À¯Ãß°¡ µË´Ï´Ù.
//À͸íŸÀÔÀ¸·Î À¯Ãß
var p = new { FirstName = "°æ±Õ", LastName = "±è", Age = 19 };
À§ÀÇ ¿¹Á¦ Äڵ忡¼´Â À͸íŸÀÔÀÇ ÇüŸ¸ ¾Ë¾Æ µÎ°í ÀÚ¼¼ÇÑ ³»¿ëÀº ´ÙÀ½ °Á¿¡¼ ÀÚ¼¼È÷ ¾Ë¾Æ º¸µµ·Ï ÇϰڽÀ´Ï´Ù.
´ÙÀ½Àº Äõ¸®Ç¥Çö½ÄÀÇ Å¸ÀÔÀ» À¯ÃßÇÏ´Â ÄÚµå ÀÔ´Ï´Ù.
// IEnumerable ŸÀÔÀ¸·Î À¯Ãß
var products =
from p in Products
where p.ProductName == "chai"
select p;
À§ÀÇ Äõ¸® Ç¥Çö½ÄÀº LINQ¸¦ Ȱ¿ëÇÔ¿¡ ÀÖ¾î¼ °¡Àå ¸¹ÀÌ »ç¿ëµÇ´Â ±¸Á¶ÀÔ´Ï´Ù. Äڵ忡 ´ëÇØ °£´ÜÈ÷ ¾Ë¾Æº¸¸é ProductsÅ×ÀÌºí¿¡¼ ProductNameÀÌ
¡®Chai¡¯¿Í °°Àº »óǰÀ» Ãâ·ÂÇÏ´Â ±¸¹®À¸·Î ±× °á°ú´Â IEnumerable<T>ŸÀÔÀÔ´Ï´Ù.
±×·¸±â ¶§¹®¿¡ productsº¯¼ö´Â IEnumerable<T>ŸÀÔÀ¸·Î À¯Ãß µË´Ï´Ù. Äõ¸® Ç¥Çö½ÄÀº ¸¶Áö¸· °Á¿¡¼ ÀÚ¼¼È÷ ´Ù·çµµ·Ï ÇÒ °ÍÀÔ´Ï´Ù.
2. Á¤¸»·Î À¯Ã߸¦ Çϴ°¡?
°£´ÜÇÑ ¿¹Á¦ Äڵ带 ÄÄÆÄÀÏ ÇÏ°í ½ÇÁ¦ ¾î¶»°Ô ŸÀÔÀ¯Ãß°¡ ÀϾ´ÂÁö¸¦ È®ÀÎ Çϱâ À§ÇØ IL DisAssembler(ildasm.exe)¸¦ »ç¿ëÇÏ¿© ÄÄÆÄÀÏµÈ ILÄڵ带 È®ÀÎ ÇØ º¸µµ·Ï ÇϰڽÀ´Ï´Ù.
¾Æ·¡´Â IntŸÀÔ°ú Á÷Á¢ ÀÛ¼ºÇÑ PersonŸÀÔÀ» ÀÌ¿ëÇÏ´Â ¿¹Á¦ ÄÚµå ÀÔ´Ï´Ù.
Class Person
{
public string FirstName;
public string LastName;
public int Age;
}
class TypeInference
{
public int GetInt()
{
var i = 10;
 int b = 11;
 var p = new Person();
 return i;
}
}
ŸÀÔÀ¯Ã߸¦ Å×½ºÆ® Çϱâ À§ÇØ º¯¼ö i´Â varŰ¿öµå¸¦ ÅëÇØ ÃʱâÈ Çß°í º¯¼ö b´Â ÀϹÝÀûÀÎ ¹æ½ÄÀ¸·Î intŸÀÔÀ¸·Î ¼±¾ð ÇÏ¿´½À´Ï´Ù.
±×¸®°í »ç¿ëÀÚ Á¤ÀÇ Å¸ÀÔÀÎ PersonŸÀÔÀ» º¯¼ö p¿¡ ÇÒ´ç Çß½À´Ï´Ù.
À§ÀÇ Äڵ带 ÄÄÆÄÀÏ ÇÑ ÈÄ IL DisAssembler¸¦ »ç¿ëÇØ ILÄڵ带 È®ÀÎ ÇØ º¸¸é ¾Æ·¡¿Í °°Àº Äڵ带 º¼ ¼ö ÀÖ½À´Ï´Ù.
º¯¼ö i¿Í º¯¼ö b ¸ðµÎ int32ÇüÅ·ΠÃʱâÈ µÈ °ÍÀ» È®ÀÎ ÇÒ ¼ö ÀÖÀ¸¸ç º¯¼ö p´Â Á¤È®È÷ PersonŸÀÔÀ¸·Î À¯ÃßµÈ °ÍÀ» È®ÀÎ ÇÒ ¼ö ÀÖ½À´Ï´Ù.
3. varŰ¿öµåÀÇ »ç¿ë ¹üÀ§
varŰ¿öµå´Â ¾Æ¹«µ¥¼³ª »ç¿ëÇÒ ¼ö ÀÖ´Â °ÍÀº ¾Æ´Õ´Ï´Ù. ¸Å¼µå ³»ºÎÀÇ Áö¿ªº¯¼ö³ª for¹®, foreach¹®, using¹®ÀÇ ÃʱâÈ ±¸¹®¿¡¼ »ç¿ëµÉ ¼ö ÀÖ½À´Ï´Ù.
¸Å¼µå ³»ÀÇ Áö¿ªº¯¼ö·Î¼ »ç¿ë
public int GetTotalCount()
{
var cnt = db.TotalCount();
return cnt;
}
for¹®ÀÇ ÃʱâÈ ±¸¹®¿¡¼ »ç¿ë
for(var i = 0 ; i <10 ; i++){¡¦}
foreach¹®ÀÇ ÃʱâÈ ±¸¹®¿¡¼ »ç¿ë
foreach(var dr in dt.Rows){¡¦}
using¹®ÀÇ ÃʱâÈ ±¸¹®¿¡¼ »ç¿ë
using(var file = new StreamReader("c:\test.txt")){¡¦.}
4. varŰ¿öµå¸¦ »ç¿ëÇÏ¸é¼ À̰͸¸Àº ÁÖÀÇÇÏÀÚ.
var Ű¿öµå´Â ÀÚ¹Ù½ºÅ©¸³Æ®³ª VBÀÇ "Variant"·Î ¿ÀÇØÇÒ ¼ö ÀÖ½À´Ï´Ù. ÇÏÁö¸¸ C#ÀÇ varŰ¿öµå´Â ·±Å¸ÀÓ¿¡ ¹ÙÀεù
µÇÁö ¾Ê°í ÄÄÆÄÀÏ Å¸ÀÓ¿¡ ÄÄÆÄÀÏ·¯°¡ ÀûÇÕÇÑ Å¸ÀÔÀ» °áÁ¤Çϰí ÇÒ´çÇÏ°Ô µË´Ï´Ù.
±×·¸±â ¶§¹®¿¡ ÄÄÆÄÀÏ·¯°¡ ÀûÇÕÇÑ Å¸ÀÔÀ» °áÁ¤ÇÏ·Á¸é ¼±¾ð°ú µ¿½Ã¿¡ ÃʱâȰ¡ ÀÌ·ç¾î Á®¾ß Çϸç NullÀº
»ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù.(NullÀº ŸÀÔÀÌ ¾ø±â ¶§¹®ÀÌÁÒ) ¶ÇÇÑ Å¬·¡½º ¹üÀ§¿¡¼´Â »ç¿ëÇÒ ¼ö ¾ø°í ¹Ýµå½Ã ¸Å¼µå ³»ÀÇ Áö¿ªº¯¼ö·Î »ç¿ëÇØ¾ß ÇÕ´Ï´Ù.
varŰ¿öµåÀÇ »ó´çÈ÷ Æí¸®ÇÏÁö¸¸ ¸í½ÃÀûÀ¸·Î ŸÀÔÀÌ ¼±¾ðµÇ¾î ÀÖÁö ¾Ê±â ¶§¹®¿¡
´Ù¸¥ °³¹ßÀÚ°¡ Äڵ带 º¸°Ô µÇ¸é Äڵ带 ÀÌÇØÇÏ±â ³ÇØ ÇÒ ¼ö ÀÖ½À´Ï´Ù. varŰ¿öµå¸¦ ¹Ýµå½Ã ÇÊ¿äÇÑ
°æ¿ì(À͸íŸÀÔ, Äõ¸®Ç¥Çö½ÄÀÇ °á°úŸÀÔ, ÁßøµÈ Á¦³×¸¯ ŸÀÔ µî)¿¡ »ç¿ëÇÏ¸é º¸´Ù ³ªÀº °³¹ß ÆíÀǼº ¹× »ý»ê¼º Çâ»ó¿¡
µµ¿òÀÌ µÉ °ÍÀÔ´Ï´Ù. ŸÀÔÀ¯Ãß´Â LINQ¸¦ »ç¿ëÇϱâ À§ÇØ ¹Ýµå½Ã ¾Ë¾Æ¾ß ÇÒ Áß¿äÇÑ ³»¿ëÀ̱⠶§¹®¿¡ ù¹øÂ° °Á¿¡¼
ÀÌ·¸°Ô ´Ù·ç¾ú½À´Ï´Ù. ´ÙÀ½ °Á´ À͸íŸÀÔ °ú °³Ã¼/Ä÷º¼Ç ÃʱâÈ¿¡ ´ëÇØ ¾Ë¾Æ º¸µµ·Ï ÇϰڽÀ´Ï´Ù.
°¨»çÇÕ´Ï´Ù.
°Á ¸ñ·ÏÀ¸·Î..
|