10-2.À̺¥Æ®

10-2-1.¸ÖƼij½ºÆ®

Delegate·ÎºÎÅÍ ÆÄ»ýµÇ´Â µ¨¸®°ÔÀÌÆ®´Â ¸Þ¼­µå Çϳª¸¸ °¡¸®Å°´Âµ¥ ºñÇØ MulticastDelegate·ÎºÎÅÍ ÆÄ»ýµÇ´Â µ¨¸®°ÔÀÌÆ®´Â È£ÃâÇÒ ¸Þ¼­µåÀÇ ¸ñ·ÏÀ» °¡Áö°í ÀÖ¾î µÑ ÀÌ»óÀÇ ¸Þ¼­µå¸¦ °¡¸®Å²´Ù. ¾î¶² ŸÀÔÀ» »ç¿ëÇÒ °ÍÀÎÁö´Â ÃëÇÏ´Â ¿¬»êÀ» º¸°í ÄÄÆÄÀÏ·¯°¡ ÀÚµ¿À¸·Î °áÁ¤ÇÑ´Ù.

¸Þ¼­µå¸¦ Ãß°¡ÇÒ ¶§´Â + ¿¬»êÀÚ³ª += ¿¬»êÀÚ¸¦ »ç¿ëÇÏ¸ç ¹Ý´ë·Î Á¦°ÅÇÒ ¶§´Â -³ª -= ¿¬»êÀÚ¸¦ »ç¿ëÇÑ´Ù. Åë»ó ÀÚ±â ÀÚ½ÅÀÇ ¸ñ·Ï¿¡ ¸Þ¼­µå¸¦ Ãß°¡, »èÁ¦ÇϹǷΠ+=, -= ¿¬»êÀÚ°¡ »ç¿ëµÈ´Ù. ¸ÖƼij½ºÆ® µ¨¸®°ÔÀÌÆ®¸¦ È£ÃâÇÏ¸é µî·ÏµÈ ¸Þ¼­µå¸¦ ¼ø¼­´ë·Î È£ÃâÇÑ´Ù.

 

MultiCast

using System;

 

delegate void Dele(int a);

 

class CSTest {

             public static void Method1(int a) { Console.WriteLine("Method1 " + a); }

             public static void Method2(int a) { Console.WriteLine("Method2 " + a); }

             static void Main() {

                           Dele d;

                           d = Method1;

                           d += Method2;

                           d(34);

             }

}

½ÇÇà°á°ú

Method1 34

Method2 34

 

d¿¡ Method1À» ´ëÀÔÇÑ ÈÄ += ¿¬»êÀÚ·Î Method2¸¦ Ãß°¡Çß´Ù. Ãß°¡ µ¿ÀÛÀ» ÇßÀ¸´Ï ¸ÖƼij½ºÆ®·Î »ý¼ºµÈ´Ù. d °´Ã¼¿¡´Â Method1°ú Method2°¡ µî·ÏµÇ¸ç d¸¦ È£ÃâÇÏ¸é µÎ ¸Þ¼­µå°¡ ¼ø¼­´ë·Î È£ÃâµÈ´Ù. ÃÖÃÊ null·Î ÃʱâÈ­Çϸé Ç×»ó += ¿¬»êÀÚ·Î ¸Þ¼­µå¸¦ Ãß°¡ÇÒ ¼ö ÀÖ¾î ÀÏ°ü¼ºÀÌ ÀÖ´Ù.

 

Dele d = null;

d += Method1;

d += Method2;

 

¿©·¯ ¸Þ¼­µå¸¦ ÇѲ¨¹ø¿¡ È£ÃâÇÏ·Á¸é ¸®ÅÏ Å¸ÀÔÀº void¿©¾ß ÇÑ´Ù. ÀÓÀÇ Å¸ÀÔÀ» ¸®ÅÏÇÏ´Â °ÍÀ» ¹®¹ýÀûÀ¸·Î ±ÝÁöÇÏÁö´Â ¾ÊÁö¸¸ ¸¶Áö¸· ¸Þ¼­µåÀÇ ¸®ÅÏ°ª¸¸ À¯È¿ÇÑ ³í¸®ÀûÀÎ ¹®Á¦°¡ ÀÖ´Ù. °°Àº ÀÌÀ¯·Î Ãâ·Â¿ë(out) Àμö°¡ À־ ¾ÈµÈ´Ù.

¸ÖƼ ij½ºÆÃÀº ÇϳªÀÇ »ç°ÇÀ» ¿©·¯ °´Ã¼¿¡ µ¿½Ã¿¡ Àü´ÞÇÒ ¶§ »ç¿ëÇÑ´Ù. ºñµð¿À ´ë¿©Á¡ÀÇ ÃÖ½ÅÀÛ ºñµð¿À´Â ÀαⰡ ¸¹¾Æ ¼­·Î ºô·Á °¡·Á°í ÁÙÀ» ¼±´Ù. »çÀå´ÔÀº ÁÙ ¼± °í°´ÀÇ ¸í´ÜÀ» ÀÛ¼ºÇØ ³õ°í ÃÖ½ÅÀÛÀÌ Ãâ½ÃµÇ¸é °í°´¿¡°Ô ¾Ë·Á ÁÖ´Â ¼­ºñ½º¸¦ ÇÑ´Ù. ÀÌ·² ¶§ ¸ÖƼ ij½ºÆÃÀÌ ÇÊ¿äÇÏ´Ù. ÃÖ½ÅÀÛ ºñµð¿À Ãâ½Ã´Â ÇϳªÀÇ »ç°ÇÀÌ°í ÀÌ »ç°ÇÀ» ±â´Ù¸®´Â °í°´Àº ¿©·¯ ¸íÀÌ´Ù. ÀÏ°ýÀûÀ¸·Î ÅëÁö¸¦ º¸³»·Á¸é ¹Ì¸® ¸ñ·ÏÀ» ÀÛ¼ºÇØ µÎ¾ú´Ù°¡ ¸ðµç °í°´¿¡°Ô µ¿½Ã¿¡ ¾Ë·Á¾ß ÇÑ´Ù. ÀÌ »óȲÀ» ÄÚµå·Î ±¸ÇöÇØ º¸ÀÚ.

 

NewVideo

using System;

 

delegate void Notice(string Movie);

 

class Mania {

             private int id;

             public Mania(int aid) {

                           id = aid;

             }

             public void RendMe(string Movie) {

                           Console.WriteLine($"{id}¹ø °í°´ÀÌ {Movie}¸¦ ºô·Á°£´Ù.");

             }

}

 

class CSTest {

             static void Main() {

                           Mania[] arMania = new Mania[10];

                           for (int i = 0; i < 10; i++) {

                                        arMania[i] = new Mania(i);

                           }

 

                           Notice RentCall = null;

                           RentCall += arMania[1].RendMe;

                           RentCall += arMania[4].RendMe;

                           RentCall += arMania[6].RendMe;

                           RentCall += arMania[9].RendMe;

 

                           RentCall("¿¬ÇʺÎÀÎ Èæ½É Ç°¾ú³×");

             }

}

½ÇÇà°á°ú

1¹ø °í°´ÀÌ ¿¬ÇʺÎÀÎ Èæ½É Ç°¾ú³×¸¦ ºô·Á°£´Ù.

4¹ø °í°´ÀÌ ¿¬ÇʺÎÀÎ Èæ½É Ç°¾ú³×¸¦ ºô·Á°£´Ù.

6¹ø °í°´ÀÌ ¿¬ÇʺÎÀÎ Èæ½É Ç°¾ú³×¸¦ ºô·Á°£´Ù.

9¹ø °í°´ÀÌ ¿¬ÇʺÎÀÎ Èæ½É Ç°¾ú³×¸¦ ºô·Á°£´Ù.

 

°í°´Àº °íÀ¯ÀÇ ID¸¦ °¡Áö¸ç ºñµð¿À¸¦ ºô·Á º¸´Â RendMe µ¿ÀÛÀ» ÇÑ´Ù. Main¿¡¼­ 10¸íÀÇ °í°´ °´Ã¼¸¦ »ý¼ºÇß´Ù. Notice´Â ºñµð¿À¸¦ ºô·Á º¸´Â ¸Þ¼­µåÀÇ ¸ñ·ÏÀ» °¡¸®Å°´Â ŸÀÔÀ̸ç Àμö´Â ºô·Áº¼ ºñµð¿À Á¦¸ñÀÌ´Ù. RentCall °´Ã¼´Â ÃÖ½ÅÀÛÀ» ±â´Ù¸®´Â °í°´ÀÇ RendMe ¸Þ¼­µå ¸ñ·ÏÀ» °¡Áø´Ù.

RentCall µ¨¸®°ÔÀÌÆ®¿¡ °í°´ÀÇ RendMe ¸Þ¼­µå¸¦ µî·ÏÇÏ´Â °ÍÀº "ÃÖ½ÅÀÛÀÌ ³ª¿À¸é ÀúÇÑÅ× Á» ºô·Á ÁÖ¼¼¿ä"¶ó°í ¹Ì¸® ºÎŹÇØ ³õ´Â °ÍÀÌ´Ù. 1, 4, 6, 9¹ø °í°´ÀÌ µî·ÏÇßÀ¸¸ç »çÀå´ÔÀº ÃÖ½ÅÀÛÀÌ ³ª¿À´Â Áï½Ã RentCall¸¸ È£ÃâÇÏ¸é µÈ´Ù. ÀÌ ¸ñ·Ï¿¡ µî·ÏµÈ °í°´ÀÌ ¼ø¼­´ë·Î ¿Í ºñµð¿À¸¦ ºô·Á°£´Ù. ¸ÖƼij½ºÆ®°¡ ¾ø´Ù¸é º°µµÀÇ ÀÚ·á ±¸Á¶¸¦ ¸¸µé¾î ¸ñ·ÏÀ» ÀÛ¼ºÇÏ°í ÃÖ½ÅÀÛ ¹ßÇ¥ »ç½ÇÀ» °í°´µé¿¡°Ô ¾Ë¸®±â À§ÇØ ·çÇÁ¸¦ µ¹¾Æ¾ß ÇÑ´Ù. ¾î·ÆÁö´Â ¾ÊÁö¸¸ Á÷Á¢ Çϱâ´Â ±ÍÂú´Ù. ÀÌ ÀÛ¾÷À» ´ë½ÅÇØ ÁÖ´Â °ÍÀÌ ¸ÖƼij½ºÆ® µ¨¸®°ÔÀÌÆ®ÀÌ´Ù.

10-2-2.À̺¥Æ®

À̺¥Æ®(Event)´Â ¸ÖƼij½ºÆ® µ¨¸®°ÔÀÌÆ®·Î ±¸ÇöµÇ¸ç ¾î¶² »ç°ÇÀÌ ¹ß»ýÇßÀ» ¶§ È£ÃâÇÒ ¸Þ¼­µåÀÇ ¸ñ·ÏÀÌ´Ù. À̺¥Æ®¿¡ ÀÇÇØ È£ÃâµÇ´Â ¸Þ¼­µå¸¦ À̺¥Æ® Çڵ鷯¶ó°í ºÎ¸¥´Ù. ¸Þ½ÃÁö ±¸µ¿ ½Ã½ºÅÛ¿¡¼­ Äڵ带 ¼øÂ÷ÀûÀ¸·Î ½ÇÇàÇÏÁö ¾Ê°í ¹ß»ýÇÑ »ç°Ç¿¡ µû¶ó ¹ÝÀÀÇÏ´Â ¹æ½ÄÀ¸·Î ó¸®ÇÑ´Ù.

»ç¿ëÀÚ³ª ÁÖº¯ ÀåÄ¡¿¡ ÀÇÇØ ¹ß»ýÇÏ´Â ÀÏüÀÇ º¯È­¸¦ À̺¥Æ®¶ó°í ÇÏ¸ç ¿î¿µÃ¼Á¦´Â À̺¥Æ®°¡ ¹ß»ýÇÒ ¶§¸¶´Ù ¸Þ½ÃÁö¸¦ º¸³» ó¸®ÇÒ ±âȸ¸¦ Á¦°øÇÏ´Ù. ¸Þ½ÃÁö¸¦ °´Ã¼ÁöÇâÀûÀ¸·Î ĸ½¶È­ÇÑ °ÍÀÌ ¹Ù·Î À̺¥Æ®ÀÌ´Ù. À̺¥Æ®ÀÇ ¼±¾ð Çü½ÄÀº ´ÙÀ½°ú °°´Ù.

 

ÁöÁ¤ÀÚ event µ¨¸®°ÔÀÌÆ® À̸§;

 

À̺¥Æ®´Â µ¨¸®°ÔÀÌÆ®ÀÇ °´Ã¼ Çü½ÄÀ¸·Î ¼±¾ðÇÑ´Ù. µ¨¸®°ÔÀÌÆ®´Â ¾î¶² Àμö¸¦ ¹Þ´ÂÁö Á¤ÀÇÇÏ¿© À̺¥Æ® Çڵ鷯ÀÇ ÇüŸ¦ ±ÔÁ¤ÇÑ´Ù. ´ÙÀ½ ¿¹Á¦´Â µ¥ÀÌÅÍ ¼ö½Å °´Ã¼°¡ ³×Æ®¿÷À¸·Î µ¥ÀÌÅ͸¦ Àü¼Û¹Þ´Ù°¡ ¿Ï·áµÇ¸é À̺¥Æ®·Î ÁöÁ¤ÇÑ ¸Þ¼­µå¸¦ È£ÃâÇÏ¿© Àü¼Û ¿Ï·á »ç½ÇÀ» ¾Ë¸°´Ù.

 

CompleteEvent

½ÇÇà°á°ú

using System;

 

delegate void Notice();

 

class Printer {

             public void Print() {

                           Console.WriteLine("¼ö½ÅµÈ µ¥ÀÌÅ͸¦ ÀμâÇÕ´Ï´Ù.");

             }

}

 

class Receiver {

             public event Notice OnComplete;

             public void Receive() {

                           for (int i = 0; i < 100; i += 10) {

                                        Console.WriteLine(i + "% ¼ö½ÅÁß");

                                        System.Threading.Thread.Sleep(200);

                           }

                           if (OnComplete != null) OnComplete();

             }

}

 

class CSTest {

             static void Main() {

                           Printer P = new Printer();

                           Receiver R = new Receiver();

                           R.OnComplete += P.Print;

                           R.Receive();

             }

}

0% ¼ö½ÅÁß

10% ¼ö½ÅÁß

20% ¼ö½ÅÁß

30% ¼ö½ÅÁß

40% ¼ö½ÅÁß

50% ¼ö½ÅÁß

60% ¼ö½ÅÁß

70% ¼ö½ÅÁß

80% ¼ö½ÅÁß

90% ¼ö½ÅÁß

¼ö½ÅµÈ µ¥ÀÌÅ͸¦ ÀμâÇÕ´Ï´Ù.

 

¼øÂ÷ÀûÀ¸·Î ¸Þ½ÃÁö¸¦ ¼ö½ÅÇÏ¸ç ¿Ï·á½Ã ÀμâÇÑ´Ù. Receiver Ŭ·¡½ºÀÇ Receive ¸Þ¼­µå´Â ³×Æ®¿÷¿¡¼­ µ¥ÀÌÅ͸¦ ¼ö½ÅÇϴµ¥ ²Ï ¿À·£ ½Ã°£ÀÌ °É¸°´Ù. È£Ãâ¿ø¿¡¼­ ¼ö½ÅÀÌ ¿Ï·áµÉ ¶§ ¾î¶² µ¿ÀÛ, ¿¹¸¦ µé¾î ÀμâÇÏ°í ½Í´Ù¸é À̺¥Æ®¸¦ µî·ÏÇØ µÐ´Ù. Receiver Ŭ·¡½º´Â ¼ö½Å ¿Ï·á½Ã È£ÃâÇÒ ¸Þ¼­µå¸¦ ÀúÀåÇϱâ À§ÇØ Notice ŸÀÔÀÇ OnComplete À̺¥Æ®¸¦ °¡Áø´Ù. Notice´Â ´Ü¼øÈ÷ ÀÛ¾÷ ¿Ï·á »ç½Ç¸¸ Å뺸 ¹ÞÀ¸¹Ç·Î Àμö³ª ¸®ÅÏ°ªÀº ¾ø´Ù.

Receive¸¦ È£ÃâÇϱâ Àü¿¡ OnComplete À̺¥Æ®¿¡ ¼ö½Å ¿Ï·á ÈÄ¿¡ È£ÃâÇÒ ¸Þ¼­µå¸¦ ¹Ì¸® µî·ÏÇØ µÐ´Ù. Àμ⸦ ´ã´çÇÏ´Â Printer °´Ã¼ÀÇ Print ¸Þ¼­µå¸¦ OnComplete À̺¥Æ®¿¡ µî·ÏÇÏ¿© ¼ö½Å ¿Ï·á »ç°Ç¿¡ ´ëÇØ Àμ⠵¿ÀÛÀ¸·Î ¹ÝÀÀÇÑ´Ù. À̺¥Æ® Çڵ鷯¸¦ µî·ÏÇØ ³õÁö ¾ÊÀ¸¸é ¼ö½Å¸¸ µÉ »Ó È£Ãâ¿øÀÌ ¼ö½Å ¿Ï·á »ç½ÇÀ» ¾Ë ¼ö ¾ø´Ù.

ÀÌ ¿¹Á¦ÀÇ °æ¿ì Receive ¸Þ¼­µå°¡ ¸®ÅÏÇÒ ¶§°¡ ¼ö½Å ¿Ï·á ½ÃÁ¡À̸ç À̶§ Àμâ ÀÛ¾÷À» Çصµ µÈ´Ù. ±×·¯³ª ¿©·¯ °³ÀÇ ÀÛ¾÷ÀÌ ºñµ¿±âÀûÀ¸·Î ÁøÇàµÇ´Â ¸ÖƼ ½º·¹µå ȯ°æ¿¡¼­´Â ¿Ï·á ½ÃÁ¡À» Á¤È®È÷ ¾Ë ¼ö ¾ø´Ù. ±×·¡¼­ °¢ °´Ã¼°¡ °íÀ¯ÀÇ ÀÛ¾÷À» ¾Ë¾Æ¼­ ó¸®Ç쵂 ¿äûÇÑ »ç°ÇÀÌ ¹ß»ýÇÒ ¶§ ¼­·Î Åë½ÅÇÒ ¼ö ÀÖ´Â À̺¥Æ®°¡ ÇÊ¿äÇÏ´Ù.

À̺¥Æ®¿¡ ´ëÇÑ »ó¼¼ÇÑ Á¤º¸°¡ ÀÖÀ¸¸é À̺¥Æ® Çڵ鷯·Î Àμö¸¦ Àü´ÞÇÑ´Ù. À̺¥Æ®¸¦ ¹ß»ý½ÃŲ ÁÖü¿Í À̺¥Æ®¿¡ ´ëÇÑ Á¤º¸¸¦ EventArgs µîÀÇ °´Ã¼·Î Àü´ÞÇÑ´Ù. ¼ö½Å °´Ã¼°¡ µÑ ÀÌ»óÀÌ¸é ´©°¡ ¼ö½Å ¿Ï·áÇß´ÂÁö ¾Ë·Á¾ß ÇÏ¸ç ¼ö½ÅµÈ ÆÄÀÏ¿¡ ´ëÇÑ Á¤º¸µµ ÇÊ¿äÇÏ´Ù.

À̺¥Æ® Çڵ鷯´Â ¹ß»ýÇÑ »ç°ÇÀ» ó¸®ÇÒ »Ó ¿äûÀ̳ª Áú¹®¿¡ ÀÀ´äÇÏ´Â °ÍÀÌ ¾Æ´Ï¾î¼­ ¸®ÅÏ°ªÀº ¾ø´Ù. º¸Åë ºñµ¿±âÀûÀ¸·Î È£ÃâµÇ¾î ¸®ÅÏÀ» ¹Þ¾ÆÁÙ ÁÖüµµ ¾ø´Ù. ²À ¸®ÅÏÀÌ ÇÊ¿äÇÏ´Ù¸é Ãâ·Â¿ë Àμö¸¦ ´ë½Å »ç¿ëÇÑ´Ù.

µ¨¸®°ÔÀÌÆ®¿Í À̺¥Æ®´Â °ÅÀÇ ºñ½ÁÇÏ´Ù. ¸Þ¼­µåÀÇ ¸ñ·ÏÀ» ÀúÀåÇÏ´Â °ÍÀº µ¨¸®°ÔÀÌÆ®·Îµµ ÃæºÐÇѵ¥ ¿Ö ±»ÀÌ À̺¥Æ®¶ó´Â °ÍÀ» ¶Ç ¸¸µç °ÍÀϱî? À§ ¿¹Á¦ÀÇ OnComplete ¼±¾ð¹®¿¡¼­ event Å°¿öµå¸¦ »©°í µ¨¸®°ÔÀÌÆ®·Î ¼±¾ðÇصµ Àß µ¿ÀÛÇÑ´Ù.

 

public Notice OnComplete;

 

À̺¥Æ®¿Í µ¨¸®°ÔÀÌÆ®´Â »ç¿ë ¸ñÀûÀÌ °°´Ù. ±×·¯³ª Á¤¸» ¶È°°´Ù¸é ±»ÀÌ À̺¥Æ®¶ó´Â °ÍÀ» Á¤ÀÇÇØ ³õ¾ÒÀ» ¸®°¡ ¾ø´Ù. À̺¥Æ®´Â µ¨¸®°ÔÀÌÆ®¿¡ ºñÇØ ±â´ÉÀÌ Á¦ÇÑÀûÀÌ´Ù. Çڵ鷯¸¦ Ãß°¡, »èÁ¦¸¸ ÇÒ ¼ö ÀÖ°í ¸ñ·ÏÀ» º¸°Å³ª °ü¸®ÇÒ ¼ö´Â ¾ø´Ù. À̺¥Æ®¿¡ ÀÌ·± °í±Þ ±â´É±îÁö ÇÊ¿ä ¾øÀ¸¸ç ÀÖ¾î ºÁ¾ß ³­À̵µ¸¸ ³ô¾ÆÁö°í ºÎÁÖÀÇÇÑ »ç¿ëÀ¸·Î ÀÎÇØ ¾ÈÁ¤¼º±îÁö À§Çù¹Þ´Â´Ù. ±×·¡¼­ µ¨¸®°ÔÀÌÆ®´Â ¼û±â°í ÃÖÁ¾ »ç¿ëÀÚ°¡ Æí¸®ÇÏ°Ô ¾µ ¼ö ÀÖ´Â ´õ °£´ÜÇÑ À̺¥Æ®¸¸ °ø°³ÇÑ´Ù.

ÄÄÆÄÀÏ·¯´Â À̺¥Æ®¿¡ ¸Þ¼­µå¸¦ ÷»èÇÏ´Â Á¢±ÙÀÚ¸¦ Á¤±³ÇÏ°Ô ÀÛ¼ºÇÏ¿© ¸ÖƼ ½º·¹µå¿¡ ´ëÇؼ­µµ ¾ÈÀüÇÏ´Ù. Á¢±ÙÀÚ´Â ½º·¹µå¿¡ ¾ÈÀüÇÑ ¹æ¹ýÀ¸·Î ¸Þ¼­µå¸¦ ÷»èÇÑ´Ù. ¾Õ ¿¹Á¦ÀÇ OnComplete À̺¥Æ®´Â ÄÄÆÄÀÏ·¯¿¡ ÀÇÇØ ´ÙÀ½°ú °°ÀÌ ±¸ÇöµÈ´Ù. À̺¥Æ® ¼±¾ð¹®À» ÀÌ ÄÚµå·Î ´ëüÇصµ Àß µ¿ÀÛÇÑ´Ù.

 

public Notice __OnComplete;

public event Notice OnComplete {

         add {

                      lock (this) { __OnComplete += value; }

         }

         remove {

                      lock (this) { __OnComplete -= value; }

         }

}

 

µ¨¸®°ÔÀÌÆ®´Â __OnComplete¶ó´Â À̸§À¸·Î ¼û±ä´Ù. OnComplete À̺¥Æ® ³»ºÎ¿¡´Â add, remove Á¢±ÙÀÚ ºí·ÏÀÌ »ý¼ºµÇ¸ç À̺¥Æ®¿¡ ´ëÇØ += ¿¬»êÀ» Çϸé add°¡ È£ÃâµÇ°í -= ¿¬»êÀ» Çϸé remove°¡ È£ÃâµÈ´Ù. »ç¿ëÀÚ°¡ À̺¥Æ®¿¡ ´ëÇØ ÇÒ ¼ö ÀÖ´Â Á¶ÀÛÀº ÀÌ µÎ °¡Áö¿Í À̺¥Æ®¸¦ È£ÃâÇÏ´Â °Í »ÓÀÌ´Ù.

Á¢±ÙÀÚ´Â ´ë»ó ¸Þ¼­µå¸¦ ¾Ï½ÃÀû Àμö value·Î ¹Þ¾Æ ¼û°ÜÁø __OnComplete µ¨¸®°ÔÀÌÆ®¿¡ Ãß°¡ ¹× Á¦°ÅÇÑ´Ù. À̶§ lock ¸í·ÉÀ¸·Î °´Ã¼¸¦ Àá±Å ´Ù¸¥ ½º·¹µå°¡ ¹æÇØÇÏÁö ¾Êµµ·Ï ÇÑ´Ù. ¸ÖƼ ½º·¹µå ȯ°æ¿¡¼­´Â ÇϳªÀÇ ´ë»óÀ» µ¿½Ã¿¡ ¼öÁ¤ÇÏ¿© ¹Î°¨ÇÑ ¹®Á¦°¡ ¹ß»ýÇϴµ¥ lock¸í·ÉÀ¸·Î µ¿±âÈ­ÇÏ¿© ¸»½éÀ» ¿øõ Â÷´ÜÇÑ´Ù.

add, remove Á¢±ÙÀÚ¸¦ Á÷Á¢ ÀÛ¼ºÇÏ¸é ¸ñ·ÏÀ» ´õ È¿À²ÀûÀ¸·Î °ü¸®Çϰųª null ÂüÁ¶¿¡ ´ëÇÑ ¿¡·¯±îÁö ¼¶¼¼ÇÏ°Ô Ã³¸®ÇÒ ¼ö ÀÖ´Ù. ¸ñ·ÏÀ̶ó°í ÇØ ºÁ¾ß ±â²¯ ÇÑ µÎ °³ÀÇ ¸Þ¼­µå¿¡ ºÒ°úÇØ °í±Þ ±â´É±îÁö´Â ÇÊ¿ä ¾ø´Ù. ÄÄÆÄÀÏ·¯ÀÇ ÀÚµ¿ Äڵ常 Çصµ ÃæºÐÇÏ´Ù. À̺¥Æ®´Â µ¨¸®°ÔÀÌÆ®ÀÇ º¹ÀâÇÑ ¹®¹ýÀ» ¼û°Ü ÆíÀǼºÀ» ³ôÀÌ°í ³­À̵µ¸¦ ¶³¾î¶ß¸°´Ù. µðÀÚÀΠŸÀÓ¿¡ ºñÁÖ¾ó ¹æ½ÄÀÇ Çڵ鷯 ÆíÁýÀÌ °¡´ÉÇØ Æí¸®ÇÏ°í »ý»ê¼ºÀÌ Çâ»óµÈ´Ù. ºñÁÖ¾ó ½ºÆ©µð¿À´Â ÀÌ·± ±â´ÉÀ» ÈǸ¢ÇÏ°Ô Áö¿øÇϴµ¥ ¹öÆ°ÀÇ Å¬¸¯ À̺¥Æ®¸¦ ó¸®ÇØ º¸ÀÚ.

 

ClickEvent

½ÇÇà°á°ú

using System;

 

public delegate void DeleClick();

class Button {

             public event DeleClick Click;

             public void Draw() {

                           Console.WriteLine("³ª´Â ¹öÆ°ÀÔ´Ï´Ù.");

             }

             public void OnClick() {

                           if (Click != null) Click();

             }

}

 

class CSTest {

             static void GameStart() {

                           Console.WriteLine("°ÔÀÓÀ» ½ÃÀÛÇÕ´Ï´Ù.");

                           for (int i = 0; i < 50; i++) {

                                        Console.Write('.');

                                        System.Threading.Thread.Sleep(50);

                           }

                           Console.WriteLine("\n°ÔÀÓ ³¡³µ´Ù Ä¡°í.");

             }

             static void Main() {

                           Button BtnStart = new Button();

                           BtnStart.Draw();

                           BtnStart.Click += GameStart;

                           Console.WriteLine("S:°ÔÀÓ ½ÃÀÛ , E:³¡");

                           for (; ; )

                           {

                                        if (Console.KeyAvailable) {

                                                     ConsoleKeyInfo cki;

                                                     cki = Console.ReadKey();

                                                     if (cki.Key == ConsoleKey.S) {

                                                                  BtnStart.OnClick();

                                                     }

                                                     if (cki.Key == ConsoleKey.E) {

                                                                   break;

                                                     }

 

                                        }

                                        System.Threading.Thread.Sleep(100);

                           }

             }

}

³ª´Â ¹öÆ°ÀÔ´Ï´Ù.

S:°ÔÀÓ ½ÃÀÛ , E:³¡

s°ÔÀÓÀ» ½ÃÀÛÇÕ´Ï´Ù.

..................................................

°ÔÀÓ ³¡³µ´Ù Ä¡°í.

s°ÔÀÓÀ» ½ÃÀÛÇÕ´Ï´Ù.

..................................................

°ÔÀÓ ³¡³µ´Ù Ä¡°í.

 

¹öÆ°ÀÇ Ä¸¼ÇÀÌ Ãâ·ÂµÇ°í ´©¸£¸é °ÔÀÓÀ» ½ÃÀÛÇϰųª ³¡³½´Ù. ¹öÆ°Àº ¸¶¿ì½º·Î Ŭ¸¯ÇÏ´Â ÀåÄ¡ÀÌÁö¸¸ Äֿܼ¡¼­ ¸¶¿ì½º¸¦ ¾µ ¼ö ¾ø¾î(Á¤¸» ¸ø¾²´Â °Ç ¾Æ´ÏÁö¸¸ ¹ø°Å·Ó´Ù.) ÆíÀÇ»ó Å°º¸µå S¸¦ ´©¸£´Â °ÍÀ¸·Î Ŭ¸¯À» ´ë½ÅÇß´Ù. Button Ŭ·¡½º¿¡ Click À̺¥Æ®°¡ ¼±¾ðµÇ¾î ÀÖ°í Main¿¡¼­ GameStart Çڵ鷯¸¦ ÇÒ´çÇß´Ù. SÅ°¸¦ ´©¸£¸é ¹öÆ°ÀÇ OnClick ¸Þ¼­µå°¡ È£ÃâµÇ°í ¿©±â¼­ Click¿¡ ÀúÀåµÈ ¸Þ¼­µå¸¦ È£ÃâÇÏ¿© °ÔÀÓÀ» ½ÃÀÛÇÑ´Ù.

ÅؽºÆ® ȯ°æÀ̶ó Èä³»¸¸ ³Â´Âµ¥ °³³ä¸¸ ÀÌÇØÇÏ°í ³Ñ¾î°¡ÀÚ. ±×·¡ÇÈ È¯°æ¿¡¼­ À̺¥Æ®¸¦ µî·ÏÇÏ°í ÆíÁýÇÏ´Â °ÍÀº °³¹ßÅøÀÌ ´Ù Çϵµ·Ï µÇ¾î ÀÖ¾î °³¹ßÅø »ç¿ë¹ý¸¸ Àß ÀÍÈ÷¸é µÈ´Ù. ´Ù¸¸ °³¹ßÅøÀÌ ³»ºÎ¿¡¼­ ¾î¶² µ¿ÀÛÀ» ÇÑ´Ù´Â °Í°ú °³¹ßÅøÀÌ »ý¼ºÇÑ Äڵ带 ÀÌÇØÇϸé ÀÀ¿ë·ÂÀÌ ´õ ³Ð¾îÁø´Ù.

10-2-3.ÀÍ¸í ¸Þ¼­µå

µ¨¸®°ÔÀÌÆ®ÀÇ ÂüÁ¶ ´ë»óÀº Äڵ带 °¡Áö´Â ¸Þ¼­µåÀÌ¸ç µû¶ó¼­ µ¨¸®°ÔÀÌÆ®¸¦ »ç¿ëÇÏ·Á¸é ¿øÇüÀÌ °°Àº ¸Þ¼­µå°¡ Á¸ÀçÇØ¾ß ÇÑ´Ù. ´ÙÀ½ ¿¹Á¦´Â µÎ Á¤¼ö¸¦ ¹Þ¾Æ ÇÕÀ» ¸®ÅÏÇÏ´Â ÇÔ¼ö¸¦ °°Àº ¿øÇüÀÇ µ¨¸®°ÔÀÌÆ®·Î °£Á¢ÀûÀ¸·Î È£ÃâÇÑ´Ù.

 

DeleCall

½ÇÇà°á°ú

using System;

 

delegate int Dele(int a, int b);

 

class CSTest {

             public static int Add(int a, int b) {

                           return a + b;

             }

             static void Main() {

                           Dele d = Add;

                           int k = d(2, 3);

                           Console.WriteLine(k);

             }

}

5

 

ƯÁ¤ µ¨¸®°ÔÀÌÆ®°¡ ¿ä±¸ÇÏ´Â Äڵ带 ½ÇÇàÇÏ·Á¸é ¸Þ¼­µå¸¦ µû·Î ¸¸µé¾î¾ß ÇÑ´Ù. Äڵ带 ´ãÀ» ¼ö ÀÖ´Â ÃÖ¼ÒÇÑÀÇ ´ÜÀ§°¡ ¸Þ¼­µåÀ̱⠶§¹®ÀÌ´Ù. ±îÁþ°Å Çϳª ¸¸µé¸é µÇÁö¸¸ return a + b°°Àº ªÀº Äڵ峪 ÇÑ ÁÙÂ¥¸® À̺¥Æ® Çڵ鷯¸¦ ÀÏÀÏÀÌ ¸¸µå´Â °ÍÀº ºÎ´ã½º·´´Ù.

½ÇÁ¦ Äڵ庸´Ù Çì´õ³ª º»Ã¼¸¦ °¨½Î´Â ºí·ÏÀÌ ´õ ±æ°í ¸Þ¼­µå°¡ ¸¹À¸¸é °ü¸®Çϱ⵵ ¹ø°Å·Ó´Ù. À̺¥Æ® Çڵ鷯´Â ƯÁ¤ÇÑ »óȲ¿¡¼­ µü ÇÑ ¹ø¸¸ È£ÃâµÇ´Â ÀÏȸ¿ëÀ̾ ¹Ýº¹ Á¦°ÅÀÇ Àǹ̵µ ¾ø°í ÀÏÀÏÀÌ À̸§À» ºÙÀÌ´Â °ÍÁ¶Â÷µµ ±ÍÂú´Ù. ±×·¡¼­ ´å³Ý 2.0ºÎÅÍ´Â À̸§¾ø´Â ÀÍ¸í ¸Þ¼­µå¸¦ Áö¿øÇÑ´Ù.

 

delegate(Àμö ¸ñ·Ï) { ¸Þ¼­µå ÄÚµå };

 

delegate Å°¿öµå·Î ½ÃÀÛÇϸç Àμö ¸ñ·Ï°ú { } ºí·Ï ¾ÈÀÇ º»Ã¼¸¦ Á¤ÀÇÇÑ´Ù. Add ¸Þ¼­µå¸¦ ÀÍ¸í ¸Þ¼­µå·Î ÀÛ¼ºÇØ º¸ÀÚ.

 

Anonymous

using System;

 

delegate int Dele(int a, int b);

 

class CSTest {

             static void Main() {

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

                           int k = d(2, 3);

                           Console.WriteLine(k);

             }

}

 

delegate Å°¿öµå ´ÙÀ½¿¡ Àμö ¸ñ·ÏÀ» ¾²°í º»Ã¼ ³»¿ëÀ» ÄÚµå ºí·Ï¿¡ Áý¾î ³ÖÀ¸¸é µÈ´Ù. °°Àº ¿øÇüÀÇ µ¨¸®°ÔÀÌÆ® d·Î ÀÍ¸í ¸Þ¼­µå¸¦ ´ëÀÔ¹Þ¾Ò´Ù. ÀÍ¸í ¸Þ¼­µå´Â °ªÀ¸·Î ºÐ·ùµÇ¹Ç·Î ´ëÀÔ¹® ³¡ÀÇ ¼¼¹ÌÄÝ·ÐÀ» »©¸ÔÁö ¾Êµµ·Ï ÁÖÀÇÇÏÀÚ. d´Â return a + b Äڵ带 °¡Áö¸ç d(2, 3) È£Ãâ¿¡ ÀÇÇØ ÀÌ ÄÚµå ºí·ÏÀÌ È£ÃâµÈ´Ù. Add ¸Þ¼­µå°¡ »ç¶óÁö°í Äڵ常 ÀÍ¸í ¸Þ¼­µå·Î ³²¾Ò´Ù. ÀÍ¸í ¸Þ¼­µå°¡ µ¨¸®°ÔÀÌÆ®¸¦ ´ëüÇϹǷΠµ¨¸®°ÔÀÌÆ®¸¦ ¿ä±¸ÇÏ´Â ¸Þ¼­µåÀÇ ½ÇÀμö·Î ³Ñ°Üµµ µÈ´Ù.

 

AnonPara

using System;

 

delegate int Dele(int a, int b);

 

class CSTest {

             static int Calc(Dele d) {

                           return d(2, 3);

             }

             static void Main() {

                           int k;

                           k = Calc(delegate (int a, int b) { return a + b; });

                           Console.WriteLine(k);

                           k = Calc(delegate (int a, int b) { return a * b; });

                           Console.WriteLine(k);

             }

}

 

Calc ¸Þ¼­µå´Â µÎ °³ÀÇ Á¤¼ö¸¦ ÃëÇÏ´Â ¸Þ¼­µå¸¦ Àμö·Î ¹Þ¾Æ ´ë½Å È£ÃâÇÑ´Ù. Dele ŸÀÔÀÇ ¸Þ¼­µå°¡ ÇÊ¿äÇÏÁö¸¸ ÀÏÀÏÀÌ ¸¸µé ÇÊ¿ä ¾øÀÌ È£Ãâ¹®¿¡¼­ ÀÍ¸í ¸Þ¼­µå¸¦ ¸¸µé¾î ¹Ù·Î ³Ñ°Ü ¹ö¸®¸é µÈ´Ù.

µ¨¸®°ÔÀÌÆ®¿¡ ´ëÀԵǴ ÀÍ¸í ¸Þ¼­µå´Â µ¨¸®°ÔÀÌÆ®°¡ ¿ä±¸ÇÏ´Â ¿øÇü°ú ÀÏÄ¡ÇÏ´Â °ÍÀÌ ÀÌ»óÀûÀÌ´Ù. ±×·¯³ª Á¤È®ÇÏ°Ô ÀÏÄ¡ÇÏÁö ¾Ê´õ¶óµµ ´ëÀÔÀÌ Çã¿ëµÇ´Â °æ¿ìµµ ÀÖ´Ù. ´ÙÀ½ ¿¹Á¦·Î Å×½ºÆ®ÇØ º¸ÀÚ. ÁÖ¼® ó¸®µÈ ÄÚµå´Â ¿¡·¯°¡ ¹ß»ýÇÏ´Â ÁÙÀÌ´Ù.

 

DeleAssign

using System;

 

delegate int Dele(int a, string b);

delegate void Deleout(int a, out int b);

 

class CSTest {

             static void Main() {

                           Dele d1 = delegate (int a, string b) { return 0; };

                           //dele d2 = delegate(double a) { return 0; };

                           //dele d3 = delegate(int a, string b) { };

                           Dele d4 = delegate { return 0; };

                           int k = d4(1, "abcd");

 

                           Deleout d5 = delegate (int a, out int b) { b = 0; };

                           //deleout d6 = delegate { };

             }

}

 

Dele µ¨¸®°ÔÀÌÆ®´Â Á¤¼öÇü Çϳª, ¹®ÀÚ¿­ Çϳª¸¦ Àμö·Î ÃëÇÏ°í int¸¦ ¸®ÅÏÇÏ´Â ¸Þ¼­µå¸¦ °¡¸®Å²´Ù. Dele ŸÀÔÀÇ °´Ã¼¿¡ ¿©·¯ °¡Áö ÀÍ¸í ¸Þ¼­µå¸¦ ´ëÀÔÇØ º¸¾Ò´Ù. d1¿¡ ´ëÀԵǴ ÀÍ¸í ¸Þ¼­µå´Â dele ŸÀÔ°ú ÀÏÄ¡ÇÏ¿© ¹®Á¦°¡ ¾ø´Ù. ¹Ý¸é d2´Â Àμö ¸ñ·ÏÀÌ ´Ù¸£°í d3´Â ¸®ÅÏ Å¸ÀÔÀÌ ¸ÂÁö ¾Ê¾Æ Dele ŸÀÔÀÇ °´Ã¼¿¡ ´ëÀÔµÇÁö ¾Ê´Â´Ù. ¿©±â±îÁö´Â Áö±ØÈ÷ »ó½ÄÀûÀÌ´Ù. ±×·±µ¥ d4¿¡ ´ëÀԵǴ ÀÍ¸í ¸Þ¼­µå´Â Àμö ¸ñ·ÏÀÌ ´Ù¸£Áö¸¸ ´ëÀÔ °¡´ÉÇÏ´Ù. ±ÔÄ¢Àº ÀÌ·¸´Ù. ÀÍ¸í ¸Þ¼­µåÀÇ Àμö ¸ñ·ÏÀº µ¨¸®°ÔÀÌÆ®ÀÇ Àμö ¸ñ·Ï°ú Á¤È®ÇÏ°Ô ÀÏÄ¡Çϰųª ¾Æ´Ï¸é ¾Æ¿¹ ¾ø¾î¾ß ÇÑ´Ù. Àμö ¸ñ·ÏÀÌ ¾ø´Ù´Â °ÍÀº º»Ã¼¿¡¼­ Àμö¸¦ ÂüÁ¶ÇÏÁö ¾Ê´Â´Ù´Â ¶æÀÌ´Ù.

¹Ù·Î ¾Æ·¡ÀÇ È£Ãâ¹® d4(1, "abcd")´Â ¾Æ¹« ¹®Á¦¾øÀÌ È£ÃâµÈ´Ù. ½ÇÀμö 1°ú "abcd"°¡ Àü´ÞµÇÁö¸¸ ÀÍ¸í ¸Þ¼­µå¿¡¼­ ÂüÁ¶ÇÏÁö ¾Ê´Â´Ù. Àü´ÞµÇÁö ¾ÊÀº Àμö¸¦ ÂüÁ¶ÇÏ´Â °ÍÀº ºÒ°¡´ÉÇÏÁö¸¸ Àü´ÞµÈ Àμö¸¦ ¹«½ÃÇÏ´Â °ÍÀº °¡´ÉÇÏ´Ù. ±×·¯³ª Ãâ·Â¿ë Àμö´Â È£Ãâ¿ø¿¡¼­ ´ëÀÔÇØ Áֱ⸦ °­Á¦ÇÏ´Â °ÍÀ̾ »ý·«ÇÒ ¼ö ¾ø´Ù. Deleout ŸÀÔÀº Ãâ·Â¿ë Àμö°¡ ÀÖ´Â ¸Þ¼­µå¸¦ °¡¸®Å²´Ù. d5´Â ¿øÇü°ú ÀÏÄ¡ÇÏ´Â ÀÍ¸í ¸Þ¼­µå¸¦ ´ëÀÔ¹Þ¾ÒÀ¸¸ç ÄÚµå ºí·Ï¿¡¼­ bÀÇ °ªÀ» ´ëÀÔÇϹǷΠÁ¤»óÀûÀÌ´Ù. ¹Ý¸é d6´Â Àμö ¸ñ·ÏÀÌ ¾Æ¿¹ ¾øÀ¸¸ç bÀÇ °ªÀ» ÃʱâÈ­ÇÏ´Â Äڵ尡 ¾ø¾î ¿¡·¯ 󸮵ȴÙ.

ÀÍ¸í ¸Þ¼­µåÀÇ Àμö´Â ÄÚµå ºí·Ï¿¡¼­¸¸ »ç¿ëÇÒ ¼ö ÀÖ´Â Áö¿ªº¯¼ö´Ù. ºí·Ï³»¿¡¼­ ´õ ÇÊ¿äÇÑ Áö¿ªº¯¼ö¸¦ ¼±¾ðÇØ ¾µ ¼öµµ ÀÖ´Ù. Àμö ¹× Áö¿ªº¯¼ö ¿Ü¿¡ ÀÍ¸í ¸Þ¼­µå°¡ ¼ÓÇÑ ºí·ÏÀÇ Áö¿ªº¯¼öµµ ÂüÁ¶ÇÒ ¼ö Àִµ¥ À̸¦ ¿ÜºÎ º¯¼ö ¶Ç´Â ĸóµÈ º¯¼ö¶ó°í ÇÑ´Ù.

 

Capture

½ÇÇà°á°ú

using System;

 

delegate int Dele(int a, int b);

 

class CSTest {

             public static void SetDelegate(out Dele d) {

                           int k = 5;

                           d = delegate (int a, int b) { return a + b + k; };

             }

             static void Main() {

                           Dele d;

                           SetDelegate(out d);

                           int z = d(2, 3);

                           Console.WriteLine(z);

             }

}

10

 

SetDelegate ¸Þ¼­µå´Â Ãâ·Â¿ë Àμö·Î Àü´ÞµÈ d¿¡ ÀÍ¸í ¸Þ¼­µå¸¦ Á¤ÀÇÇÏ¿© ´ëÀÔÇÑ´Ù. a, b´Â ÀÍ¸í ¸Þ¼­µåÀÇ Áö¿ªº¯¼öÀ̹ǷΠÄÚµå ºí·Ï¿¡¼­ »ç¿ë °¡´ÉÇÏ´Ù. SetDelegateÀÇ Áö¿ªº¯¼ö kµµ ÂüÁ¶ÇÒ ¼ö Àִµ¥ ÀÌ º¯¼ö°¡ ¹Ù·Î ¿ÜºÎ º¯¼öÀÌ´Ù. ÀÍ¸í ¸Þ¼­µå°¡ ÀÚ½ÅÀÌ ¼ÓÇÑ ºí·ÏÀÇ Áö¿ªº¯¼ö¸¦ ÂüÁ¶ÇÏ´Â °ÍÀº ¾îÂî º¸¸é ÀÚ¿¬½º·¯¿ö º¸ÀδÙ. À̶§ ¿ÜºÎ º¯¼öÀÇ »ý¸íÀÌ ¹®Á¦°¡ µÈ´Ù. ÀÍ¸í ¸Þ¼­µå´Â Á¤ÀÇ ½ÃÁ¡°ú È£Ãâ ½ÃÁ¡ÀÌ ´Þ¶ó È£ÃâµÉ °¡´É¼ºÀÌ ÀÖ´Â µ¿¾È¿¡´Â ¿ÜºÎ º¯¼öµµ °è¼Ó À¯È¿ÇØ¾ß ÇÑ´Ù.

±×·¡¼­ ÀÍ¸í ¸Þ¼­µå¸¦ ÂüÁ¶ÇÏ´Â µ¨¸®°ÔÀÌÆ®°¡ ¸ðµÎ Á¦°ÅµÉ ¶§±îÁö ¿ÜºÎ º¯¼öÀÇ »ý¸íÀº ¿¬ÀåµÈ´Ù. ¿ÜºÎ º¯¼ö°¡ ÀÍ¸í ¸Þ¼­µå¿¡ ÀÇÇØ ºÙÀâÈù ²ÃÀ̶ó ĸóµÈ º¯¼ö¶ó°í ºÎ¸¥´Ù. k´Â SetDelegate ¸Þ¼­µåÀÇ Áö¿ªº¯¼ö¿¡ ºÒ°úÇÏÁö¸¸ ÀÚ½ÅÀ» ÂüÁ¶ÇÏ´Â ÀÍ¸í ¸Þ¼­µå°¡ ÀÖ´Â ÇÑ °è¼Ó ³²¾Æ ÀÖ¾î¾ß ÇÑ´Ù. d¸¦ È£ÃâÇÒ ¶§±îÁö k´Â ¸Þ¸ð¸®¿¡ ³²¾Æ ÀÖÀ¸¸ç ±×·¡¼­ 2, 3°ú kÀÇ °ª 5¸¦ ´õÇÑ 10ÀÌ Ãâ·ÂµÈ´Ù. d°¡ Á¦°ÅµÉ ¶§ kµµ °°ÀÌ Á¦°ÅµÈ´Ù.

ÀÍ¸í ¸Þ¼­µå¿¡´Â º¹ÀâÇÑ ±ÔÄ¢ÀÌ Àû¿ëµÈ´Ù. goto ¸í·ÉÀ¸·Î ÀÍ¸í ¸Þ¼­µå ºí·Ï ¾ÈÀ¸·Î Á¡ÇÁÇÒ ¼ö ¾ø°í ¿©·¯ °³ÀÇ ÀÍ¸í ¸Þ¼­µå°¡ ÇϳªÀÇ ¿ÜºÎ º¯¼ö¸¦ °øÀ¯ÇÒ ¼ö ÀÖ´Ù. ÀÌ·± ±ÔÄ¢Àº ¿±±âÀûÀÌ°í ºñÁ¤»óÀûÀÎ »óȲ¿¡ ´ëóÇϱâ À§ÇØ ¸¶·ÃµÈ °ÍÀÌ¸ç º¹Àâµµ¿¡ ºñÇØ ½Ç¿ë¼ºÀÌ ¶³¾îÁ® Á¤È®È÷ ¾Ë ÇÊ¿ä ¾ø´Ù. »ó½Ä¿¡ ¸Â°Ô¸¸ ÀÛ¼ºÇÏ¸é µÈ´Ù.