14-3.¶÷´Ù Ç¥Çö½Ä

14-3-1.È®Àå ¸Þ¼­µå

È®Àå ¸Þ¼­µå(Extension Method)´Â ±âÁ¸ÀÇ Å¬·¡½º¸¦ À¯ÁöÇÑ Ã¤·Î ¸Þ¼­µå¸¦ Ãß°¡ÇÏ´Â ¹æ¹ýÀÌ´Ù. ¿ÜºÎ¿¡ º°µµ·Î Á¤ÀÇÇÏÁö¸¸ ¸¶Ä¡ Ŭ·¡½º¿¡ ¼ÓÇØ ÀÖ´Â ¸Þ¼­µåó·³ È£ÃâÇÒ ¼ö ÀÖ´Ù. ¿Ö ÀÌ·± ¸Þ¼­µå°¡ ÇÊ¿äÇÑÁö ´Ü°èº°·Î ¿¹Á¦¸¦ ¸¸µé¾î º¸ÀÚ.

 

Integer

using System;

 

public class Integer {

             public int a;

             public Integer(int aa) { a = aa; }

             public int Add(int b) { return a + b; }

             public int Mul(int b) { return a * b; }

}

 

class CSTest {

             static void Main() {

                           Integer Num = new Integer(3);

                           Console.WriteLine("µ¡¼À : " + Num.Add(2));

                           Console.WriteLine("°ö¼À : " + Num.Mul(2));

             }

}

½ÇÇà°á°ú

µ¡¼À : 5

°ö¼À : 6

 

Á¤¼ö¸¦ Ç¥ÇöÇϴ Ŭ·¡½º Integer¸¦ ¼±¾ðÇÏ°í µ¡¼À°ú °ö¼ÀÀ» ÇÏ´Â ¸Þ¼­µå Add¿Í MulÀ» Á¤ÀÇÇß´Ù. Integer¿¡ »¬¼À ±â´ÉÀ» Ãß°¡ÇÏ°í ½Í´Ù¸é ¸Þ¼­µå¸¸ Ãß°¡ÇÏ¸é µÈ´Ù.

 

public class Integer {

         ....

         public int Sub(int b) { return a - b; }

}

 

Console.WriteLine("»¬¼À : " + Num.Sub(2));

 

±×·¯³ª ¸ðµç Ŭ·¡½ºÀÇ ¼Ò½º¸¦ ¸¶À½´ë·Î ¶â¾î °íÄ¥ ¼ö ÀÖ´Â °ÍÀº ¾Æ´Ï´Ù. Integer°¡ ´å³Ý ÇÁ·¹ÀÓ¿öÅ©¿¡ ¼ÓÇÑ ½Ã½ºÅÛ Å¬·¡½ºÀ̰ųª µ·ÁÖ°í ±¸ÀÔÇÑ ¶óÀ̺귯¸®¿¡ ¼ÓÇØ ÀÖ´Ù¸é »ç¿ë¸¸ ÇÒ ¼ö ÀÖÀ» »Ó ¼öÁ¤ÇÒ ¼ö´Â ¾ø´Ù.

»ó¼ÓÀº ¿ø·¡ÀÇ Å¬·¡½º¸¦ ±×´ë·Î µÎ°í ÆÄ»ý Ŭ·¡½º¸¦ »õ·Î ¸¸µå´Â °ÍÀ̾ È®Àå°ú´Â ´Ù¸£´Ù. ÆÄ»ý Ŭ·¡½º´Â ¿ø·¡ÀÇ Å¬·¡½º¿Í À̸§ÀÌ ´Þ¶ó Ŭ¶óÀ̾ðÆ®ÀÇ Äڵ嵵 ¸ðµÎ ¼öÁ¤ÇØ¾ß ÇÑ´Ù. ¼Ò½º°¡ ¾øÀ¸¸é ¼öÁ¤ÇÒ ¼ö ¾øÀ¸´Ï ¾î¶±ÇÏµç ¹Û¿¡¼­ ±â´ÉÀ» Ãß°¡ÇÏ´Â ¼ö¹Û¿¡ ¾ø´Ù. Integer Ŭ·¡½º´Â ±×´ë·Î µÎ°í CSTest Ŭ·¡½º¿¡ »¬¼À ¸Þ¼­µå¸¦ Ãß°¡ÇØ º¸ÀÚ.

 

IntegerSub

½ÇÇà°á°ú

using System;

 

public class Integer {

             public int a;

             public Integer(int aa) { a = aa; }

             public int Add(int b) { return a + b; }

             public int Mul(int b) { return a * b; }

}

 

class CSTest {

             static int Sub(Integer I, int b) { return I.a - b; }

             static void Main() {

                           Integer Num = new Integer(3);

                           Console.WriteLine("µ¡¼À : " + Num.Add(2));

                           Console.WriteLine("°ö¼À : " + Num.Mul(2));

                           Console.WriteLine("»¬¼À : " + Sub(Num, 2));

             }

}

µ¡¼À : 5

°ö¼À : 6

»¬¼À : 1

 

Á¤Àû ¸Þ¼­µå Sub¸¦ Ãß°¡ÇÏ°í Integer °´Ã¼ I¿Í Á¤¼ö b¸¦ ¹Þ¾Æ I.a¿Í b¸¦ »¬¼ÀÇÑ °á°ú¸¦ ¸®ÅÏÇÑ´Ù. Integer °´Ã¼¿Í Á¤¼ö¸¦ »©´Â ¸ñÀûÀº ´Þ¼ºÇßÁö¸¸ Ŭ·¡½º ¼Ò¼ÓÀÇ Add³ª Mul°ú »ç¿ë ¹æ¹ýÀÌ ´Ù¸£´Ù. ¿ÜºÎ¿¡ Á¤ÀÇµÈ Á¤Àû ¸Þ¼­µå¿©¼­ Num.Sub(2)·Î È£ÃâÇÒ ¼ö ¾ø°í °´Ã¼¸¦ Àμö·Î Àü´ÞÇÏ¿© Sub(Num,2)·Î È£ÃâÇØ¾ß ÇÑ´Ù.

ÀÌ ¹®Á¦¸¦ ÇØ°áÇÏ´Â °ÍÀÌ È®Àå ¸Þ¼­µåÀÌ¸ç ¿ÜºÎÀÇ Á¤Àû ¸Þ¼­µå¸¦ ÀνºÅϽº ¸Þ¼­µåó·³ È£ÃâÇÏ´Â ¹®¹ýÀ» Á¤ÀÇÇÑ´Ù. Ŭ·¡½º¸¦ ¶â¾î °íÄ¡Áö ¾Ê°í ¿ÜºÎ¿¡¼­ º¸±â¿¡ ¸Þ¼­µå°¡ ´Ã¾î³­ °Íó·³ ¸¸µé¾î ÁØ´Ù. È®Àå ¸Þ¼­µåÀÇ Ã¹ ¹ø° Àμö´Â È®Àå ´ë»ó Ŭ·¡½ºÀÇ °´Ã¼À̸ç this ÁöÁ¤ÀÚ¸¦ ºÙÀδÙ. ¶Ç È®Àå ¸Þ¼­µå´Â º°µµÀÇ Á¤Àû Ŭ·¡½º¿¡ Á¤ÀÇÇÑ´Ù.

 

IntegerExt

½ÇÇà°á°ú

using System;

 

public class Integer {

             public int a;

             public Integer(int aa) { a = aa; }

             public int Add(int b) { return a + b; }

             public int Mul(int b) { return a * b; }

}

 

public static class IntegerExt {

             public static int Sub(this Integer I, int b) {

                           return I.a - b;

             }

}

 

class CSTest {

             static void Main() {

                           Integer Num = new Integer(3);

                           Console.WriteLine("µ¡¼À : " + Num.Add(2));

                           Console.WriteLine("°ö¼À : " + Num.Mul(2));

                           Console.WriteLine("»¬¼À : " + Num.Sub(2));

             }

}

µ¡¼À : 5

°ö¼À : 6

»¬¼À : 1

 

IntegerExt Á¤Àû Ŭ·¡½º¸¦ ¼±¾ðÇÏ°í ÀÌ ¾È¿¡ Sub Á¤Àû ¸Þ¼­µå¸¦ ¼±¾ðÇß´Ù. ù ¹ø° Àμö´Â Integer I °´Ã¼ÀÌµÇ this Å°¿öµå¸¦ ºÙ¿´´Ù. ¿©±â¼­ this´Â ¹Ù·Î µÚÀÇ Å¬·¡½º¿¡ ´ëÇÑ È®Àå ¸Þ¼­µåÀÓÀ» ÀǹÌÇÏ´Â ÁöÁ¤ÀÚ(Modifier)ÀÌ´Ù. Sub´Â Integer Ŭ·¡½ºÀÇ È®Àå ¸Þ¼­µåÀÌ´Ù.

µÎ ¹ø° ÀÌÈÄÀÇ Àμö´Â ÀÚÀ¯·Ó°Ô ¹Þ¾ÆµéÀδÙ. Sub´Â Á¤¼ö b¸¦ ¹Þ¾Æ I.a¿Í bÀÇ Â÷¸¦ °è»êÇÏ¿© ¸®ÅÏÇÑ´Ù. È®Àå ¸Þ¼­µå¸¦ ÀνºÅϽº ¸Þ¼­µåó·³ È£ÃâÇϸé È£Ãâ °´Ã¼¸¦ ù ¹ø° Àμö·Î Àü´ÞÇÑ´Ù. Num.Sub(2) È£Ãâ¹®ÀÌ ³»ºÎÀûÀ¸·Î´Â Sub(Num, 2)·Î ¹Ù²ï´Ù. ÀνºÅϽº ¸Þ¼­µå È£Ãâ½Ã ¼û°ÜÁø ÂüÁ¶ÀÚ this¸¦ Àü´ÞÇÏ´Â °Í°ú À¯»çÇÏ´Ù.

Sub ¸Þ¼­µå°¡ Ŭ·¡½º ¼Ò¼ÓÀÎÁö ¿ÜºÎ¿¡¼­ È®ÀåÇÑ °ÍÀÎÁö ½Å°æ¾µ ÇÊ¿ä ¾øÀÌ Integer Ŭ·¡½º¿¡ ¿ø·¡ ÀÖ´Â °Íó·³ È£ÃâÇÏ¸é µÈ´Ù. È£Ãâ ¹®¹ýÀº ÀνºÅϽº ¸Þ¼­µå¿Í °°Áö¸¸ ¼Ò¼ÓÀº ¿ÜºÎ¿©¼­ Ŭ·¡½ºÀÇ ¼û°ÜÁø ¸â¹ö´Â ¾×¼¼½ºÇÒ ¼ö ¾ø´Ù. ±×·¡¼­ È®Àå ¸Þ¼­µå°¡ ĸ½¶È­ À§¹ÝÀº ¾Æ´Ï¸ç º¸¾È»óÀÇ ¹®Á¦´Â ¾ø´Ù.

È®Àå ¸Þ¼­µå¸¦ ´ã´Â Á¤Àû Ŭ·¡½º´Â À̸§À̳ª ¼Ò¼Ó¿¡ Á¦ÇÑÀÌ ¾ø´Ù. È®Àå ¸Þ¼­µå´Â Àü¿ªÀ̾î¾ß ÀÚ¿¬½º·´Áö¸¸ C#Àº Àü¿ªÀÇ °³³äÀÌ ¾ø¾î ¾î¿ ¼ö ¾øÀÌ Á¤Àû Ŭ·¡½º·Î ²®µ¥±â¸¦ °¨½Î´Â °Í »ÓÀÌ´Ù. ¿ÜºÎ ³×ÀÓ½ºÆäÀ̽º¿¡ ¼±¾ðµÇ¾î À־ using¹®¸¸ ¼±¾ðÇØ µÎ¸é Àß Ã£¾Æ³½´Ù. using Linq ¼±¾ð¸¸ Çϸé LINQ¸¦ Áö¿øÇÏ´Â È®Àå ¸Þ¼­µå¸¦ ÀÚÀ¯·Ó°Ô ¾µ ¼ö ÀÖ´Ù.

Ŭ·¡½º ¼Ò¼ÓÀº ¾Æ´ÏÁö¸¸ ¿ÜºÎ¿¡¼­ º¸±â¿¡ ÀνºÅϽº ¸Þ¼­µåó·³ º¸ÀδÙ. ±×·¡¼­ »ç¿ëÀÚ¿¡°Ô È¥¶õÀ» ÁÖÁö ¾Ê°í ±âÁ¸ÀÇ Å¬·¡½º¸¦ È®ÀåÇÏ´Â ÁÁÀº ¹æ¹ýÀÌ´Ù. ÇÁ·¹ÀÓ¿öÅ©¿¡ Á¤ÀǵǾî ÀÖ´Â ½Ã½ºÅÛ Å¬·¡½ºµµ È®ÀåÇÒ ¼ö ÀÖ´Ù.

 

Int32Ext

½ÇÇà°á°ú

using System;

 

public static class Int32Ext {

             public static int Dubae(this int n) {

                           return n * 2;

             }

             public static int Jegop(this int n) {

                           return n * n;

             }

}

 

class CSTest {

             static void Main() {

                           Console.WriteLine("µ¡¼À : " + 5.Dubae());

                           Console.WriteLine("Á¦°ö : " + 5.Jegop());

             }

}

µ¡¼À : 10

Á¦°ö : 25

 

Á¤¼ö¿¡ Dubae´Ï JegopÀÌ´Ï ÇÏ´Â ¸Þ¼­µå´Â ¿ø·¡ ¾ø´Ù. ÇÏÁö¸¸ È®Àå ¸Þ¼­µå¸¦ ¾²¸é ÀÌ·± ±â´ÉÀÌ ¿ø·¡ ÀÖ¾ú´ø °Íó·³ ¸¸µé ¼ö ÀÖ´Ù. Á¤¼ö¿¡ ´ëÇØ µÎ ¹è¿Í Á¦°öÀÌ Àß ½ÇÇàµÈ´Ù. ÀÌ ¹æ¹ýÀ» ¾²¸é ¸ðµç Ŭ·¡½º¸¦ È®ÀåÇÒ ¼ö ÀÖÀ¸¸ç ¿­°ÅÇüµµ Ŭ·¡½ºÀÇ ÀÏÁ¾À̾ Àû¿ëÇÒ ¼ö ÀÖ´Ù.

È®Àå ¸Þ¼­µå´Â ¸ÚÁø ¹æ¹ýÀÌÁö¸¸ ³²¿ëÇؼ­´Â ¾ÈµÇ¸ç ²À ÇÊ¿äÇÒ ¶§¸¸ »ç¿ëÇØ¾ß ÇÑ´Ù. Ŭ·¡½º¸¦ È®ÀåÇÏ´Â Á¤¼®Àº »ó¼ÓÀÌ´Ù. È®Àå ¸Þ¼­µå·Î ÇÁ·ÎÆÛƼ³ª À̺¥Æ®¸¦ Ãß°¡ÇÒ ¼ö´Â ¾ø´Ù. ÀÌ¿¡ ºñÇØ »ó¼ÓÀº Ãß°¡ ¼±¾ð, ÀçÁ¤ÀÇ´Â ¹°·ÐÀÌ°í ´ÙÇü¼º±îÁö ¹ßÈÖÇÒ ¼ö ÀÖ´Ù.

°°Àº À̸§ÀÇ ¸Þ¼­µå°¡ Ŭ·¡½º¿¡µµ ÀÖ°í È®Àå ¸Þ¼­µå·Îµµ Á¸ÀçÇÑ´Ù¸é ÀνºÅϽº ¸Þ¼­µå°¡ ¼±ÅõȴÙ. ¿¡·¯´Â ¹ß»ýÇÏÁö ¾ÊÀ¸¸ç È®Àå ¸Þ¼­µåÀÇ ¿ì¼±¼øÀ§°¡ ³·´Ù. È®Àå ¸Þ¼­µå·Î ÀνºÅϽº ¸Þ¼­µå¸¦ ÀçÁ¤ÀÇÇÒ ¼ö´Â ¾øÀ¸¸ç ÀÌ·± °æ¿ìµµ »ó¼ÓÀÌ Á¤¼®ÀÌ´Ù.

14-3-2.¶÷´Ù Ç¥Çö½Ä

¶÷´Ù Ç¥Çö½Ä(Lambda Expression)Àº Äڵ带 ¸Þ¼­µå¾øÀÌ ÀζóÀÎÀ¸·Î ÀÛ¼ºÇÏ´Â ±â¹ýÀÌ´Ù. ÀÍ¸í ¸Þ¼­µå¿Í À¯»çÇÏÁö¸¸ ´ÙÀ½ ¼¼ °¡Áö ¸é¿¡¼­ ±â´ÉÀûÀ¸·Î ¿ìÀ§¿¡ ÀÖ´Ù.

 

l ÀμöÀÇ Å¸ÀÔÀ» »ý·«ÇÒ ¼ö ÀÖ´Ù. »ý·«µÈ ŸÀÔÀº µ¨¸®°ÔÀÌÆ®ÀÇ Å¸ÀÔÀ» µû¸¥´Ù.

l º»Ã¼¿¡ ¸í·É¹® »Ó¸¸ ¾Æ´Ï¶ó Ç¥Çö½Äµµ ¾µ ¼ö ÀÖ¾î Á» ´õ ª´Ù.

l Ç¥Çö½Ä Æ®¸®·Îµµ º¯È¯ÇÒ ¼ö ÀÖ´Ù.

 

µÑ ´Ù Äڵ带 ª°í °£°áÇÏ°Ô Ç¥ÇöÇÏ´Â °ÍÀÌ ¸ñÀûÀÌ´Ù. º°°Å ¾Æ´Ñ°Å °°Áö¸¸ Äõ¸® Ç¥Çö½Ä¿¡¼­´Â ¹«½ÃÇÒ ¼ö ¾øÀ» Á¤µµÀÇ Â÷ÀÌ°¡ ¹ß»ýÇÑ´Ù. ¶÷´Ù Ç¥Çö½ÄÀº ±Ø´ÜÀûÀÎ °£°áÇÔÀ» À§ÇØ µµÀÔÇÑ °ÍÀÌ´Ù. ¶÷´Ù Ç¥Çö½ÄÀÇ ½Ç¿ë¼ºÀ» ¿¬±¸ÇØ º¸±â À§ÇØ ¼ø¼­´ë·Î ¿¹Á¦¸¦ ¸¸µé¾î º¸¸é¼­ Äڵ尡 ¾î¶»°Ô ª¾ÆÁö´ÂÁö »ìÆ캸ÀÚ. ¸ðµç ¿¹Á¦ÀÇ Ãâ·Â °á°ú´Â µ¿ÀÏÇ쵂 ÄÚµåÀÇ Çü½Ä¸¸ Á¶±Ý¾¿ ´Ù¸£´Ù. ¸ÕÀú ¸Þ¼­µå¸¦ Á¤ÀÇÇÏ´Â ¿¹Á¦ºÎÅÍ º¸ÀÚ.

 

Method

using System;

 

class CSTest {

             static int Add(int a) {

                           return a + 1;

             }

 

             static void Main() {

                           int k = Add(3);

                           Console.WriteLine("k = " + k);

             }

}

½ÇÇà°á°ú

k = 4

 

Add ¸Þ¼­µå´Â Á¤¼ö Çϳª¸¦ Àü´Þ¹Þ¾Æ 1 ´õÇÑ °ªÀ» ¸®ÅÏÇÑ´Ù. ¾îÂ ½¬¿îÁö ÇÑ ´« °¨°í Àо ÀÌÇØ°¡ µÈ´Ù. Àú·± ªÀº Äڵ带 À§ÇØ ¸Þ¼­µå¸¦ Á¤ÀÇÇÏ´Â °ÍÀÌ ¹ø°Å·Ó±â ¶§¹®¿¡ ÀÍ¸í ¸Þ¼­µå¸¦ Áö¿øÇÑ´Ù.

 

AnonMethod

using System;

 

delegate int Dele(int a);

 

class CSTest {

             static void Main() {

                           Dele d = delegate (int a) { return a + 1; };

                           int k = d(3);

                           Console.WriteLine("k = " + k);

             }

}

 

µ¨¸®°ÔÀÌÆ® ÇüÅ·ΠÄڵ带 Á¤ÀÇÇÏ°í µ¨¸®°ÔÀÌÆ®¸¦ È£ÃâÇß´Ù. µ¨¸®°ÔÀÌÆ® ¼±¾ð¹® ¶§¹®¿¡ ±æÀÌ¿¡´Â º° º¯È­°¡ ¾øÁö¸¸ ¸Þ¼­µå ÀÚü´Â »ç¶óÁ³´Ù. µ¨¸®°ÔÀÌÆ® ¼±¾ð¹®Àº º¸Åë ¶óÀ̺귯¸®¿¡ ¹Ì¸® ¼±¾ðµÇ¾î ÀÖ´Â °æ¿ì°¡ ¸¹¾Æ ½ÇÁ¦ ¿¹¿¡¼­´Â ´õ ª´Ù. ¶÷´Ù Ç¥Çö½ÄÀ» ¾²¸é Á¶±Ý ´õ ª¾ÆÁø´Ù.

 

Lambda

using System;

 

delegate int Dele(int a);

 

class CSTest {

             static void Main() {

                           Dele d = a => a + 1;

                           int k = d(3);

                           Console.WriteLine("k = " + k);

             }

}

 

µ¨¸®°ÔÀÌÆ®ÀÇ º»Ã¼¸¦ ¶÷´Ù Ç¥Çö½ÄÀ¸·Î ´ëüÇß´Ù. ¹°·Ð µ¨¸®°ÔÀÌÆ®¿Í ÀμöÀÇ °³¼ö³ª ŸÀÔÀº ÀÏÄ¡ÇØ¾ß ÇÑ´Ù. a => a + 1ÀÌ ¹Ù·Î ¶÷´Ù Ç¥Çö½ÄÀÌ´Ù. ±âº» Çü½ÄÀº ´ÙÀ½°ú °°´Ù.

 

(Àμö) => Ç¥Çö½Ä ¶Ç´Â ¸í·É¹®

 

=> ¿¬»êÀÚÀÇ ¿ÞÂÊÀÌ ÀμöÀÌ°í ¿À¸¥ÂÊÀÌ Àμö¸¦ ó¸®ÇÏ´Â º»Ã¼ÀÌ´Ù. ÀÌ ¿¹Á¦ÀÇ ¶÷´Ù Ç¥Çö½ÄÀº a¸¦ ¹Þ¾Æ a + 1À» ¸®ÅÏÇϴµ¥ => ¿¬»êÀÚ¸¦ "~°¡ µÈ´Ù"·Î ÀÐÀ¸¸é ½±´Ù. a => a + 1 ¶÷´Ù½ÄÀº "a°¡ a + 1ÀÌ µÈ´Ù" ·Î Àд´Ù. ÀÍ¸í ¸Þ¼­µå¿Í ¶÷´Ù Ç¥Çö½ÄÀ» ºñ±³ÇØ º¸¸é È®½ÇÈ÷ ¶÷´Ù Ç¥Çö½ÄÀÌ ´õ ª´Ù.

delegate Å°¿öµå´Â »ç¶óÁö¸ç ¶÷´Ù½ÄÀ» ÀǹÌÇÏ´Â => ±âÈ£·Î ´ëüµÈ´Ù. Àμö aÀÇ Å¸ÀÔÀ» ¹àÈ÷Áö ¾Ê¾Æµµ µ¨¸®°ÔÀÌÆ®ÀÇ Å¸ÀÔÀ¸·ÎºÎÅÍ Ãß·ÐÇÑ´Ù. ÀμöÀÇ Å¸ÀÔÀ» ¸í½ÃÀûÀ¸·Î ¹àÇôµµ »ó°ü¾øÁö¸¸ ÀÌ °æ¿ì´Â °ýÈ£µµ °°ÀÌ Àû¾î¾ß ÇÑ´Ù.

 

Dele d = (int a) => a + 1;

 

º»Ã¼ÀÇ Äڵ忡¼­ return ¸í·É¹®ÀÌ »ý·«µÈ´Ù. ÀÍ¸í ¸Þ¼­µå´Â return a + 1;°ú °°ÀÌ ¿ÏÀüÇÑ ¸í·É¹® ÇüÅ·Πµ¿ÀÛÀ» ±â¼úÇϴµ¥ ºñÇØ ¶÷´Ù´Â a + 1 Ç¥Çö½Ä¸¸ ±â¼úÇÏ¸é µÈ´Ù. returnÀ» ½áµµ »ó°üÀº ¾ø´Âµ¥ ÀÌ °æ¿ì ¸í·É¹®À» { } ·Î °¨½Î¾ß ÇÑ´Ù. ´Ù¾çÇÑ ¶÷´Ù½ÄÀ» ±¸°æÇØ º¸ÀÚ.

 

Lambdas

½ÇÇà°á°ú

using System;

 

delegate int Dele1(int a, int b);

delegate int Dele2();

delegate void Dele3();

 

class CSTest {

             static void Main() {

                           Dele1 d1 = (x, y) => x + y;

                           int b = d1(4, 5);

                           Console.WriteLine("b = " + b);

 

                           Dele2 d2 = () => 1234;

                           int c = d2();

                           Console.WriteLine("c = " + c);

 

                           Dele3 d3 = () => { Console.WriteLine("¸í·É¹®À¸·Î µÈ ¶÷´Ù"); };

                           d3();

             }

}

b = 9

c = 1234

¸í·É¹®À¸·Î µÈ ¶÷´Ù

 

Àμö°¡ µÎ °³ ÀÖÀ¸¸é => ¿ÞÂÊÀÇ Àμö ¸ñ·ÏÀ» °ýÈ£·Î °¨½Ñ´Ù. (x, y) => x + y ¶÷´Ù½ÄÀº x¿Í y¸¦ Àü´ÞÇÏ¸é ±× ÇÕÀ» ¸®ÅÏÇÑ´Ù´Â ¶æÀÌ´Ù. Àμö°¡ Çϳª»ÓÀÌ°í ÀμöÀÇ Å¸ÀÔÀÌ ¾Ï½ÃÀûÀÏ ¶§´Â °ýÈ£¸¦ »ý·«ÇÒ ¼ö ÀÖ´Ù. Àμö°¡ ¾Æ¿¹ ¾øÀ» °æ¿ì ºó °ýÈ£¸¦ Àû´Â´Ù. º»Ã¼¿¡ Ç¥Çö½ÄÀÌ ¾Æ´Ñ ¸í·ÉÀÌ µé¾î ÀÖÀ» ¶§´Â ¿ìº¯À» { } ·Î °¨½Ñ´Ù. ¸í·É¹®ÀÇ °³¼ö¿¡ Á¦¾àÀº ¾øÁö¸¸ Åë»ó 1~3°³ Á¤µµ°¡ Àû´çÇÏ´Ù. ±× ÀÌ»óÀÇ ¸í·É¹®ÀÌ ÇÊ¿äÇÏ´Ù¸é º¹Àâµµ¸¸ Áõ°¡ÇÒ »Ó °£°á¼ºÀÌ ¶³¾îÁö¹Ç·Î ¾Æ¿¹ ¸Þ¼­µå¸¦ Á¤ÀÇÇÏ´Â °ÍÀÌ ´õ ³´´Ù.

delegate Å°¿öµå, ÀμöÀÇ Å¸ÀÔ, return ¹® µî Çü½ÄÀ» ¸ÂÃß±â À§ÇÑ ¹ø°Å·Î¿î °ÍÀ» Á¦°ÅÇÏ¿© ÀÍ¸í ¸Þ¼­µå¸¦ ¾ÐÃàÇÑ °ÍÀÌ ¶÷´Ù½ÄÀÌ´Ù. ¶÷´Ù´Â Á¶°ÇÀ» Á¡°ËÇÏ´Â Äڵ带 Á¶°Ç½Ä ÇüÅÂÀÇ µ¥ÀÌÅÍó·³ ´Ù·ç¾î Äõ¸®¹®À» ÇÔÃàÀûÀ¸·Î Ç¥ÇöÇÑ´Ù. ÀÍ¸í ¸Þ¼­µå¿¡ Àû¿ëµÇ´Â ±ÔÄ¢ÀÌ ¶÷´Ù Ç¥Çö½Ä¿¡µµ ´ëºÎºÐ ±×´ë·Î Àû¿ëµÈ´Ù. ÀμöÀÇ °³¼ö³ª ŸÀÔ ÀÏÄ¡¼ºÀ» Á¡°ËÇÏ´Â ±ÔÄ¢Àº °ÅÀÇ µ¿ÀÏÇϸç ÀÚ½ÅÀ» Æ÷ÇÔÇÑ ¸Þ¼­µåÀÇ Àμö³ª Áö¿ªº¯¼ö¸¦ ½Ä³»¿¡¼­ ÂüÁ¶ÇÒ ¼ö ÀÖ´Â º¯¼ö ĸó ±â´Éµµ ¶È°°ÀÌ Àû¿ëµÈ´Ù.