28-3-»ç.() ¿¬»êÀÚ

()µµ ÇÔ¼ö¸¦ È£ÃâÇÏ´Â ÀÏÁ¾ÀÇ ¿¬»êÀÚÀÌ´Ù. ´Ù¸¥ ¿¬»êÀÚ¿Í´Â ´Þ¸® Ç×ÀÇ °³¼ö°¡ Á¤ÇØÁ® ÀÖÁö ¾Ê´Ù´Â °ÍÀÌ Æ¯Â¡Àε¥ È£ÃâÇÏ´Â ÇÔ¼ö¿¡ µû¶ó ÀÌÇ×ÀÏ ¼öµµ ÀÖ°í ´ÜÇ×ÀÏ ¼öµµ ÀÖ°í ¼¼ °³ ÀÌ»óÀÇ Àμö¸¦ ÃëÇÒ ¼öµµ ÀÖ´Ù. ±×·¡¼­ ¿À¹ö·ÎµùÇÒ ¶§µµ ÀμöÀÇ °³¼ö¸¦ ¿øÇϴ´ë·Î ÃëÇÒ ¼ö ÀÖ°í ÀμöÀÇ °³¼ö³ª ŸÀÔÀÌ ´Ù¸£¸é ¾ó¸¶µçÁö ¿À¹ö·Îµù °¡´ÉÇϸç Àμö¿¡ µðÆúÆ®°ªÀ» ÁöÁ¤ÇÒ ¼öµµ ÀÖ´Ù. ´ÙÀ½ Ŭ·¡½º´Â Àü´ÞµÈ ÀμöµéÀÇ ÇÕÀ» ±¸ÇÏ´Â () ¿¬»êÀÚ¸¦ µÎ °³ Á¤ÀÇÇÑ´Ù.

 

¿¹ Á¦ : FunCallOp

#include <Turboc.h>

 

class Sum

{

public:

     int operator()(int a,int b,int c,int d) {

          return a+b+c+d;

     }

     double operator()(double a,double b) {

          return a+b;

     }

};

 

void main()

{

     Sum S;

     printf("1+2+3+4=%d\n",S(1,2,3,4));

     printf("1.2+3.4=%f\n",S(1.2,3.4));

}

 

¸â¹ö º¯¼ö´Â °¡ÁöÁö ¾ÊÀ¸¸ç Á¤¼ö 4°³ÀÇ ÇÕÀ» ±¸ÇÏ´Â (), ½Ç¼ö 2°³ÀÇ ÇÕÀ» ±¸ÇÏ´Â () ¿¬»êÀÚ¸¦ Á¤ÀÇÇß´Ù. main¿¡¼­ Sum ŸÀÔÀÇ °´Ã¼ S¸¦ ¼±¾ðÇϰí ÀÌ °´Ã¼·ÎºÎÅÍ ()¿¬»êÀÚ¸¦ È£ÃâÇÑ´Ù. S(...) ¹®ÀåÀº »ý¼ºÀÚ¸¦ È£ÃâÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó ÀÌ¹Ì ¸¸µé¾îÁø °´Ã¼¿¡ ´ëÇØ È£ÃâÇÏ´Â °ÍÀ̹ǷΠ¿¬»êÀÚ ÇÔ¼ö È£Ãâ¹®ÀÌ´Ù. ()¿¬»êÀÚ´Â °´Ã¼¿Í Á÷Á¢ÀûÀÎ ¿¬°üÀÌ ¾øÀ» ¼öµµ ÀÖÀ¸¹Ç·Î ¸¸µé¾îÁø °´Ã¼°¡ ¾ø¾îµµ Àӽà °´Ã¼·ÎºÎÅÍ È£ÃâÇϱ⵵ ÇÑ´Ù. ´ÙÀ½°ú °°ÀÌ ¼öÁ¤Çصµ Àß µ¿ÀÛÇÑ´Ù.

 

     printf("1+2+3+4=%d\n",Sum()(1,2,3,4));

     printf("1.2+3.4=%f\n",Sum()(1.2,3.4));

 

Sum()´Â Sum Ŭ·¡½ºÀÇ µðÆúÆ® »ý¼ºÀÚ¸¦ È£ÃâÇÏ´Â ¹®ÀåÀ̸ç ÀÌ È£Ãâ·ÎºÎÅÍ À̸§ÀÌ ¾ø´Â Àӽà °´Ã¼°¡ Çϳª »ý¼ºµÇ°í ÀÌ °´Ã¼ÀÇ ¸â¹ö ÇÔ¼ö ()¸¦ È£ÃâÇß´Ù. ¹°·Ð ÀÌ Àӽà °´Ã¼´Â ÇÔ¼ö°¡ Á¾·áµÉ ¶§ ÀÚµ¿À¸·Î ÆÄ±«µÉ °ÍÀÌ´Ù. () °ýÈ£°¡ µÎ °³³ª ÀÖ¾î ´Ù¼Ò Çò°¥¸°´Ù. ÀÌ ¿¬»êÀÚÀÇ Áº¯Àº Ç×»ó È£Ãâ °´Ã¼À̹ǷΠÀü¿ª ÇÔ¼ö·Î´Â Á¤ÀÇÇÒ ¼ö ¾øÀ¸¸ç ¹Ýµå½Ã ¸â¹ö ÇÔ¼ö·Î¸¸ Á¤ÀÇÇØ¾ß ÇÑ´Ù.

´ÙÀ½Àº Á» ´õ ½Ç¿ëÀûÀÎ ¿¹Á¦¸¦ º¸ÀÚ. ()¿¬»êÀÚ´Â ÇÇ¿¬»êÀÚ¸¦ ¿øÇϴ¸¸Å­ ÁÙ ¼ö ÀÖ´Ù´Â °ÍÀÌ ÀåÁ¡Àε¥ ¿øÇÏ´Â °ªÀ» ã±â À§ÇØ ¿©·¯ °³ÀÇ ÀÔ·ÂÀÌ ÇÊ¿äÇÑ °æ¿ì¿¡ À¯¿ëÇÏ´Ù. ´ÙÀ½ ¿¹Á¦´Â ¼ºÀûÀ» °ü¸®Çϴ Ŭ·¡½º¸¦ Á¤ÀÇÇϴµ¥ ¼ºÀû°ª Çϳª¸¦ ¾Ë±â À§Çؼ­´Â Çгâ, ÇбÞ, Çлý, °ú¸ñ 4°¡Áö³ª µÇ´Â Àμö°¡ ÇÊ¿äÇÏ´Ù. C¾ð¾î¿¡ 4Ç× ¿¬»êÀÚ´Â ¾øÀ¸¹Ç·Î ÀÌ·± µ¿ÀÛÀº °ýÈ£ ¿¬»êÀڷθ¸ Á¤ÀÇÇÒ ¼ö ÀÖ´Ù.

 

¿¹ Á¦ : ScoreManager

#include <Turboc.h>

 

class ScoreManager

{

private:

     // ¼ºÀûÀ» ÀúÀåÇÏ´Â ¿©·¯ °¡Áö ¸â¹ö º¯¼öµé

     int ar[3][5][10][4];

public:

     ScoreManager() { memset(ar,0,sizeof(ar)); }

     int &operator()(int Grade,int Class,int StNum,const char *Subj) {

          return ar[Grade][Class][StNum][0];

     }

     const int &operator()(int Grade,int Class,int StNum,const char *Subj) const {

          return ar[Grade][Class][StNum][0];

     }

};

 

void main()

{

     ScoreManager SM;

 

     printf("1Çгâ 2¹Ý 3¹ø ÇлýÀÇ ±¹¾î ¼ºÀû = %d\n",SM(1,2,3,"±¹¾î"));

     SM(2,3,4,"»ê¼ö")=99;

}

 

ScoreManager Ŭ·¡½º¿¡´Â ½ÇÁ¦ ¼ºÀûÀ» ÀúÀåÇÏ´Â ÀÚ·á ±¸Á¶¿Í ÀÌ ¼ºÀûÀ» ó¸®ÇÏ´Â ¼ö¸¹Àº ¸â¹ö ÇÔ¼öµéÀÌ Á¤ÀǵǾî ÀÖÀ» °ÍÀÌ´Ù. () ¿¬»êÀÚ´Â Á¤¼öÇüÀÇ Çгâ, ÇбÞ, Ãâ¼® ¹øÈ£¿Í ¹®ÀÚ¿­·Î µÈ °ú¸ñ À̸§À» Àμö·Î Àü´Þ¹Þ¾Æ ³»ºÎ ÀÚ·á·ÎºÎÅÍ ¿øÇÏ´Â ¼ºÀûÀ» Á¶»çÇØ¼­ Ãâ·ÂÇÑ´Ù. ¿¹Á¦´Â °£°á¼ºÀ» À§ÇØ ½ÇÁ¦ ¼ºÀûÀ» °ü¸®ÇÏÁöµµ ¾Ê°í °ú¸ñ ¹®ÀÚ¿­·ÎºÎÅÍ Ã·ÀÚ¸¦ ãÁöµµ ¾Ò¾ÒÁö¸¸ () ¿¬»êÀÚÀÇ µ¿ÀÛÀ» »ìÆìº¸±â¿¡´Â ÃæºÐÇÒ °ÍÀÌ´Ù. ¼ºÀûÀº Á¿캯¿¡ ¸ðµÎ »ç¿ëÇÒ ¼ö ÀÖÀ¸¹Ç·Î »ó¼ö ¹öÀü°ú ºñ»ó¼ö ¹öÀüÀÌ ¸ðµÎ ÇÊ¿äÇÏ´Ù.

Ŭ·¡½º´Â Á¤º¸¿Í µ¿ÀÛÀ» µ¿½Ã¿¡ °¡Áú ¼ö ÀÖÀ¸¹Ç·Î ¼¼»óÀÇ ¸ðµç »ç¹°À» ´Ù Èä³»³¾ ¼ö ÀÖ´Ù. Æ÷ÀÎÅ͸¦ ·¡ÇÎÇÒ ¼öµµ ÀÖ°í ÇÔ¼ö¸¦ ·¡ÇÎÇÒ ¼öµµ Àִµ¥ ÇÔ¼ö¸¦ ±×´ë·Î Èä³»³»´Â Ŭ·¡½º¸¦ Á¤ÀÇÇÏ°í ½ÍÀ» ¶§ ÀÌ ¿¬»êÀÚ¸¦ ÀçÁ¤ÀÇÇÑ´Ù. () ¿¬»êÀÚ¸¦ Á¤ÀÇÇϴ Ŭ·¡½º¸¦ ÇÔ¼ö °´Ã¼(Functor)¶ó°í Çϴµ¥ C++ Ç¥ÁØ ¶óÀ̺귯¸®¿¡¼­ ÀϹÝÈ­µÈ ¾Ë°í¸®ÁòÀÇ µ¿ÀÛ¿¡ º¯È­¸¦ ÁÖ±â À§ÇØ ÈçÈ÷ »ç¿ëµÈ´Ù.