¼Ò¼³°°ÀºC#  Á¦5°­ÀÇ C#ÀÇ ´ÙÇü¼º  20. Delegate  

 

5.20 Delegate

 

ÀÌ Àý¿¡¼­´Â DelegateÀÇ °³¿äÀûÀÎ ºÎºÐ¸¸À» °ËÅäÇϵµ·Ï ÇϰڽÀ´Ï´Ù. DelegateÀÇ ½ÇÁ¦ÀûÀÎ ±¸Çö°ú °ü·ÃµÈ »çÇ×µéÀº 11ÀåÀÇ Delegate¿Í Event ºÎºÐÀ» Âü°í ÇϽñ⠹ٶø´Ï´Ù. Delegate´Â ´ë¸®ÀÚ¶ó´Â Àǹ̸¦ °¡Áö°í ÀÖ½À´Ï´Ù. ¹º°¡¸¦ ´ë½ÅÇØ Áشٴ ÀǹÌÀÔ´Ï´Ù. C#¿¡¼­ DelegateÀÇ Àǹ̸¦ ¸ð¸¥´Ù¸é ¹Ù·Î ¹Ùº¸°¡ µË´Ï´Ù. DelegateÀÇ Á¤ÀǺÎÅÍ ³»·Á º¸µµ·Ï ÇÏÁÒ.

 

Áß¿ä !! ¢Ã Delegate¶õ

q                ¸Þ¼­µåÀÇ ´ë¸®ÀÚ

q                ¸Þ¼­µå¸¦ º¸´Ù È¿À²ÀûÀ¸·Î »ç¿ëÇϱâ À§ÇÏ¿© ƯÁ¤ ¸Þ¼­µå ÀÚü¸¦ ĸ½¶È­ÇÒ ¼ö ÀÖ°Ô ¸¸µé¾î ÁÖ´Â ¹æ¹ý

 

Delegate°¡ ÁÖ´Â ÀåÁ¡Àº ¸Þ¼­µå ÀÚü°¡ ĸ½¶È­ µÇ¾îÀֱ⠶§¹®¿¡ ¸Þ¼­µå¸¦ º¸´Ù È¿À²ÀûÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ°Ô ÇØ ÁÝ´Ï´Ù. ´ÙÀ½Àº DelegateÀÇ °£´ÜÇÑ ±¸ÇöÀÔ´Ï´Ù.

 

&

DeleTest.cs

Ü DelegateÀÇ °£´Ü ±¸Çö

using System;

delegate void SimpleDelegate1();

delegate void SimpleDelegate2(int i);

class AType{

     public void F1() {

          System.Console.WriteLine("AType.F1");

     }

     public void F2(int x){

          System.Console.WriteLine("AType.F2 x=" + x);

     }

}

class DeleTest {

       public static void Main(){

          AType atype = new AType();

        SimpleDelegate1 s1 = new SimpleDelegate1(atype.F1);

        SimpleDelegate2 s2 = new SimpleDelegate2(atype.F2);

        s1();

        s2(1000);

    }//main

}//class

C:\C#Example\05>csc DeleTest.cs

C:\C#Example\05>DeleTest

AType.F1

AType.F2 x=1000

 

¸Þ¼­µå¸¦ ĸ½¶È­ÇÏ¿© »ç¿ëÇÒ ¼ö ÀÖ´Ù´Â °ÍÀº ¾ÆÁÖ ´Ü¼øÇÑ ±â´ÉÀÔ´Ï´Ù. ´Ü¼øÇÑ ±â´É¸¸Å­À̳ª DelegateÀÇ ÆÄ¿ö´Â ±²ÀåÇÕ´Ï´Ù. ´ÙÀ½°ú °°Àº °æ¿ì¸¦ ¿¹¸¦ µé¾îº¸ÁÒ. ¸¸¾à ÇϳªÀÇ Å¬·¡½º¿¡¼­ ´Ù¸¥ °ÍÀº ÇÊ¿ä ¾ø°í ´ÜÁö ƯÁ¤°´Ã¼ÀÇ ¸Þ¼­µå¿¡¸¸ °ü½ÉÀÌ ÀÖ´Ù°í °¡Á¤Çغ¸ÁÒ. ƯÁ¤°´Ã¼ÀÇ ¸Þ¼­µå´Â ±× °´Ã¼ÀÇ ¸â¹ö·Î ¼Ò¼ÓµÇ¾î Àֱ⠶§¹®¿¡ ±× °´Ã¼ÀÇ ¸ðµç ±â´ÉÀ» »ç¿ëÇÒ ¼ö ÀÖÀ» °ÍÀÔ´Ï´Ù. ±×·±µ¥ ¾î¶»°Ô ¸Þ¼­µå¸¸À» ¼Ó »©¿Ã±î¶ó´Â »ý°¢À» ÇÏ°Ô µÉ °ÍÀÔ´Ï´Ù.

 

C#¿¡¼­ ½º·¹µå¸¦ ½ÇÇàÇÑ´Ù´Â °ÍÀº ÀÌ¿Í ºñ½ÁÇÕ´Ï´Ù. C#¿¡¼­ »ç¿ëµÇ´Â ¸ðµç ½º·¹µå´Â ÇϳªÀÇ Ç¥ÁØ ½º·¹µå¿¡ ¸Þ¼­µå¸¸ Ãß°¡ ½ÃÄÑÁÖ°í ½º·¹µå¸¦ ½ÃÀÛÇϸé ÀÛ¾÷À» ¼öÇàÇÕ´Ï´Ù. ¸¸¾à ¸Þ¼­µå 10°³°¡ ÀÖ´Ù¸é Ç¥ÁØ ½º·¹µå 10°³¸¦ ¸¸µé°í, ¸Þ¼­µå¸¦ Ç¥ÁØ ½º·¹µå¿¡ Çϳª¾¿ ³Ö¾îÁÖ°í ½ÇÇàÇ϶ó°í ¸í·ÉÀ» ³»¸®¸é 10°³ÀÇ ½º·¹µå°¡ µ¿½Ã¿¡ ÀÛ¾÷À» ¼öÇàÇÏ°Ô µË´Ï´Ù.

 

½º·¹µå¿Í ¸Þ¼­µåÀÇ °ü°è´Â ¾ÆÁÖ ´Ü¼øÇÕ´Ï´Ù. Main() ¸Þ¼­µåµµ ¾Ë°í º¸¸é ½º·¹µåÀÔ´Ï´Ù. Ç¥ÁØ ½º·¹µå¿¡ Main()À» ³Ö¾îÁÖ°í ½ÇÇàÇØ ´Þ¶ó´Â °ÍÀ̴ϱî¿ä. Áï, 10°³ÀÇ MainÀ» µ¿½Ã¿¡ µ¹¸°´Ù°í °¡Á¤ÇØ º¸ÁÒ. ÀÌ·² ¶§´Â 10°³ÀÇ Ç¥ÁØ ½º·¹µå°¡ ÇÊ¿äÇϰí 10°³ÀÇ Main() ¸Þ¼­µå¸¦ °¢°¢ ³Ö¾îÁØ µÚ ½ÇÇàÀ» Çϸé 10°³ÀÇ ½º·¹µå´Â CPUÀÇ TimeÀ» ºÐÇÒÇØ¼­ »ç¿ëÇÏ°Ô µÇ´Â °ÍÀÔ´Ï´Ù. ³ÊÇѹø ¶Ç ´Ù¸¥ ³ÊÇѹø...... ±×¸®°í ¸¶Áö¸·À¸·Î ³ªÇѹø! Áï, Ç¥ÁØ ½º·¹µå ÀÔÀå¿¡¼­´Â Ç×»ó ½º·¹µå°¡ ¼öÇàµÇ¾îÁö±â Àü¿¡ ¾î¶² ¸Þ¼­µå°¡ µé¾î¿ÃÁö ±Ã±ÝÇØ ÇÒ °ÍÀÔ´Ï´Ù. ÀÌ·± ¸é¿¡¼­ ½º·¹µå´Â ´Ù¸¥ °´Ã¼ÀÇ ¸Þ¼­µå¸¸À» ½ï »©¿Í¼­ ¼öÇàÇϰíÀÚ ÇÒ °ÍÀÔ´Ï´Ù. ÀÌ ¶§ ½º·¹µå´Â ¸Þ¼­µå¸¦ Delegate·Î Æ÷ÀåÇØ¼­ ±× ¸Þ¼­µå¸¸À» ´Þ¶ó°í ¿äûÇÏ´Â °ÍÀÔ´Ï´Ù. ½ÇÁ¦ ½º·¹µå¸¦ ½ÇÇàÇϱâ À§ÇÑ ¿¹´Â ´ÙÀ½°ú °°½À´Ï´Ù.

 

n                  Top t = new Top();

n                  Thread  t = new Thread(new ThreadStart(t.¸Þ¼­µå));

n                  thread.Start();

 

C#¿¡¼­ µîÀåÇÏ´Â Delegate´Â ½º·¹µå, À̺¥Æ®¿¡¼­ ¾ÆÁÖ Áß¿äÇÑ ¿ªÇÒÀ» ´ã´çÇϰí ÀÖ½À´Ï´Ù. ¸Þ¼­µå¸¦ ĸ½¶È­ÇÏ¿© ÀÌ¿ëÇϰíÀÚ ÇÑ´Ù¸é ¾îµðµç µîÀåÇÏ´Â ³ðÀÌ ¹Ù·Î DelegateÀÔ´Ï´Ù. ƯÁ¤ °´Ã¼¿¡¼­ ¸Þ¼­µå¸¦ Á÷Á¢ È£ÃâÇÏ´Â °Íº¸´Ù ¸Þ¼­µåÀÇ Ç¥ÁØÆ²À» ÀÌ¿ëÇÏ¿© »ç¿ëÇÏ´Â °ÍÀÌ ÈÙ¾À ½¬¿ì´Ï±î¿ä. ±×¸®°í »ç½Ç Delegate´Â C++¿¡¼­ ¸Þ¼­µåÀÇ ÁÖ¼ÒÈ£Ãâ¿¡ ÇØ´çÇÕ´Ï´Ù. ¸Þ¼­µåÀÇ Æ¯Á¤ ÁÖ¼Ò¸¦ ÀÌ¿ëÇÏ¿© ¸Þ¼­µå¸¦ ´õ¿í ¾ÈÀüÇÏ°í ½±°Ô È£ÃâÇϰڴٴ Àǹ̸¦ ´ã°í ÀÖ½À´Ï´Ù. ¸» ±×´ë·Î Delegate´Â ¸Þ¼­µåÀÇ ´ë¸®ÀÚ°¡ µÇ´Â °ÍÀÔ´Ï´Ù. ´õ ÀÚ¼¼ÇÑ ³»¿ëÀº 11Àå¿¡¼­ ´Ù·çµµ·Ï ÇϰڽÀ´Ï´Ù.



jabookÀúÀÚ¸íÇÔ
Á¦¸ñ:¼Ò¼³°°ÀºC# Á¦5°­ÀÇ
ÀúÀÚ:ÃÖ¿µ°ü