¾î´ðÅÍ(Adapter)¶õ ÀÌ¹Ì ¸¸µé¾îÁø ÄÄÆ÷³ÍÆ®ÀÇ ±¸ÇöÀº ±×´ë·Î Ȱ¿ëÇϰí ÀÎÅÍÆäÀ̽º¸¸ Á¶±Ý º¯°æÇÏ¿© ÄÄÆ÷³ÍÆ®¸¦ ÀϺΠº¯Çü½ÃŰ´Â °ÍÀÌ´Ù. ¾î´ðÅÍ´Â ÄÄÆ÷³ÍÆ®¸¦ Á¶±Ý¾¿ º¯ÇüÇÔÀ¸·Î½á Ȱ¿ëµµ¸¦ ³ôÀδÙ. »õ·Î ¸¸µé°íÀÚ ÇÏ´Â ºÎǰÀÌ ÀÌ¹Ì ¸¸µé¾îÁø ºÎǰÀÇ ±â´É Áß ÀϺθ¸À» ÇÊ¿ä·Î ÇÒ °æ¿ì óÀ½ºÎÅÍ »õ·Î ¸¸µé ÇÊ¿ä¾øÀÌ ±âÁ¸ ºÎǰÀ» º¯ÇüÇØ¼ »ç¿ëÇϸé ÈξÀ ´õ ºü¸£°í °£ÆíÇÏ´Ù. ¾ø´Â ±â´ÉÀ» ¸¸µé ¼ö´Â ¾øÁö¸¸ ÀÖ´Â ±â´ÉÀÇ ÀϺθ¦ ¸·¾Æ ¹ö¸°´Ù°Å³ª °íÁ¤ÇÏ´Â °ÍÀº °¡´ÉÇÏ´Ù.
¿ë¾î°¡ ±²ÀåÈ÷ ¾î·Á¿î °Í °°Áö¸¸ ÀÏ»ó »ýȰ¿¡¼µµ ¾î´ðÅÍÀÇ ¿¹´Â ¸¹ÀÌ Ã£¾Æ º¼ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î ¹Ù´Ú¿¡ ¾þµå·Á Ã¥À» Àаí Àִµ¥ °©ÀÚ±â Á¹À½ÀÌ ¸¶±¸ ½ñ¾ÆÁø´Ù°í ÇÏÀÚ. ÀáÀ» ÀÚ±â À§Çؼ´Â º£°Ô¶ó´Â °ÍÀÌ ÇÊ¿äÇѵ¥ Àå·Õ±îÁö °¬´Ù ¿À¸é ÀÌ ´ÞÄÞÇÑ ÀáÀÌ ´Þ¾Æ³ª ¹ö¸± °Í °°´Ù. ÀÌ·² ¶§´Â Àдø Ã¥À» º£°Ô»ï¾Æ ÀáÀ» ûÇÒ ¼öµµ ÀÖ´Ù. Ã¥À̶ó´Â °ÍÀº Áö½ÄÀ̳ª °¨µ¿À» Àü´ÞÇÏ´Â ¹Ìµð¾îÀÌÁö¸¸ ¿ø·¡ ¸ñÀûÀº Àá½Ã Á¢¾î µÎ°í ÅÁ÷ÇÏ°í ³ÐÀº Ç¥¸éÀ» Ȱ¿ëÇÏ¿© º£°Ô·Î ¾µ ¼öµµ ÀÖ´Ù.
Ã¥ÀÌ ÀϽÃÀûÀ¸·Î º£°Ô°¡ µÉ ¼ö ÀÖ´Â ÀÌÀ¯´Â µÎ »ç¹°ÀÌ ¾î´À Á¤µµÀÇ À¯»çÇÔÀÌ Àֱ⠶§¹®ÀÌ´Ù. ¾Æ¹«¸® ±ÞÇÏ´Ù°í ÇØµµ º¼ÆæÀ̳ª ½ÄÄ®À» º£°Ô·Î ¾µ ¼ö´Â ¾ø´Â ³ë¸©ÀÌ´Ù. ÇÚµåÆùÀº ¿ø·¡ Àüȸ¦ °É°í ¹Þ´Â °ÍÀÌ ¸ñÀûÀÎ ±â°èÀÌ´Ù. ±×·¯³ª ¾Æ¹«µµ Àüȸ¦ °É¾î ÁÖÁö ¾Ê´Â ĵµðÆùÀ̶ó¸é °ÔÀÓ±â·Î Ȱ¿ëÇÒ ¼öµµ ÀÖ´Ù. ÀüȰ¡ ¾È ¿À°í °É µ¥µµ ¾ø´Â ¿Õµû¶ó¼ ÇÚµåÆùÀÇ º»·¡ ±â´ÉÀ» Æ÷±âÇÏ°í ºÎ°¡ ±â´É Áß ÇϳªÀÎ °ÔÀÓ±â·Î¸¸ »ç¿ëÇÑ´Ù¸é À̰͵µ ¾î´ðÅÍÀÇ ÇÑ ¿¹ÀÌ´Ù. ÀÌ ¿Ü¿¡µµ ÀÏ»ó »ýȰ¿¡¼ »ç¹°ÀÇ ¿ëµµ¸¦ Àá½Ã Àü¿ëÇÏ´Â °æ¿ì´Â ¸¹ÀÌ µé ¼ö ÀÖ´Ù.
STL ÄÄÆ÷³ÍÆ®ÀÇ ¾î´ðÅ͵µ À¯»çÇÑ ¹æ½ÄÀÌ´Ù. ÀÌ·¯Äô Àú·¯Äô µ¿ÀÛÇÏ´Â ÄÄÆ÷³ÍÆ®°¡ Àִµ¥ ÀÌ·¯Äô ±â´ÉÀº ¾µ ÀÏÀÌ ÀüÇô ¾ø°í Àú·¯Äô ±â´É¸¸ ÇÊ¿äÇÏ´Ù¸é ÀÌ ÄÄÆ÷³ÍÆ®ÀÇ ÀÌ·¯Äô ±â´ÉÀ» ¸·¾Æ ¹ö¸®°í ¿ëµµ¸¦ ¹Ù²ã ¾²´Â °ÍÀÌ ¾î´ðÅÍÀÌ´Ù. ÀÌ ÆíÀÌ Àú·¯Äô ±â´É¸¸ °¡Áø ÄÄÆ÷³ÍÆ®¸¦ óÀ½ºÎÅÍ ´Ù½Ã ¸¸µå´Â °Íº¸´Ù ÈξÀ ´õ °æÁ¦ÀûÀÌ°í ½Å·ÚÇÒ¸¸ÇÏ´Ù. ÀÌ·¯Äô Àú·¯Äô ÄÄÆ÷³ÍÆ®´Â µÎ ±â´É ´Ù Àß µ¿ÀÛÇÏ´Â °ÍÀ¸·Î ÀÌ¹Ì Áõ¸íµÇ¾î Àֱ⠶§¹®ÀÌ´Ù.
ºñ·Ï STLÀÌ Á¦°øÇÏ´Â ÄÄÆ÷³ÍÆ®ÀÇ ¼ö°¡ ¸¹°í ÀϹÝȵǾî ÀÖ±â´Â ÇÏÁö¸¸ ±×·¡µµ Ư¼öÇÑ ÇÁ·Î±×·¡¹Ö ȯ°æ¿¡ µÎ·Î »ç¿ëµÇ±â¿¡´Â °áÄÚ ÃæºÐÇÏÁö ¾Ê´Ù. ±×·¸´Ù°í ÄÄÆ÷³ÍÆ®ÀÇ ¼ö¸¦ ¹«ÇÑÁ¤ ´Ã¸®±â¸¸ ÇÒ ¼ö´Â ¾øÀ¸¹Ç·Î ±âÁ¸ ÄÄÆ÷³ÍÆ®¸¦ º¯ÇüÇÒ ¼ö ÀÖ´Â ¾î´ðÅͶó´Â ¹æ¹ýÀ» Á¦°øÇÑ´Ù. ¾î´ðÅÍ´Â ÀϹÝÈµÈ ÄÄÆ÷³ÍÆ®ÀÇ ¿ëµµ¸¦ ´õ¿í È®ÀåÇÏ´Â ¿ªÇÒÀ» ÇÑ´Ù. ¾î´ðÅÍ´Â ÄÄÆ÷³ÍÆ®, ¹Ýº¹ÀÚ, ÇÔ¼ö °´Ã¼¿¡ ´ëÇØ Àû¿ëµÇ¸ç ´ÙÀ½°ú °°ÀÌ ºÐ·ùÇÒ ¼ö ÀÖ´Ù.
ÄÄÆ÷³ÍÆ® ¾î´ðÅÍ¿Í ¹Ýº¹ÀÚ ¾î´ðÅÍ´Â °ü·Ã Àå¿¡¼ ³íÇϱâ·Î ÇÏ°í ¿©±â¼´Â ÇÔ¼ö °´Ã¼¿¡ ´ëÇÑ ¾î´ðÅ͸¸ ¿ì¼±ÀûÀ¸·Î ¿¬±¸ÇØ º¸ÀÚ. ¹®¹ýÀÌ º¹ÀâÇØ¼ ´Ù¼Ò ¾î·Á¿ì¹Ç·Î ¾î¶² ½ÄÀ¸·Î µ¿ÀÛÇÏ´ÂÁö ¼Ò½º¸¦ Àß °üÂûÇØ ºÁ¾ß ÇÏ¸ç ¶§·Î´Â ¾ÕºÎºÐÀ¸·Î µ¹¾Æ°¡ º¹½ÀÀ» ÇÏ°í ¿Í¾ß ÇÏ´Â °æ¿ìµµ ÀÖÀ» °ÍÀÌ´Ù. STL ¹®¹ý Áß °¡Àå ¾î·Æ°í º¹ÀâÇÏ´Ù.
ÇÔ¼ö °´Ã¼ÀÇ ±â´ÉÀ» Á¶±ÝÀÌ¶óµµ º¯°æÇÏ·Á¸é ¾î´ðÅ͸¦ Àû¿ëÇÒ ¼ö ÀÖµµ·Ï ¸¸µé¾î¾ß Çϴµ¥ ÀÌ·± ÇÔ¼ö °´Ã¼¸¦ ¾î´ðÅͺí(Adaptable) ÇÔ¼ö °´Ã¼¶ó°í ÇÑ´Ù. ±â´ÉÀ» º¯°æÇÏ´Â ¾î´ðÅÍ´Â ´ë»ó ÇÔ¼ö °´Ã¼°¡ ÃëÇÏ´Â ÀμöÀÇ Å¸ÀÔÀº ¹«¾ùÀÎÁö, ¸®ÅÏ Å¸ÀÔÀº ¹«¾ùÀÎÁö µî ÇÔ¼ö °´Ã¼¿¡ ´ëÇÑ ÃæºÐÇÑ Á¤º¸¸¦ ¾òÀ» ¼ö ÀÖ¾î¾ß ÇÑ´Ù. ¸¸µå´Â ¹æ¹ýÀº ¾ÆÁÖ ½¬¿îµ¥ functional Çì´õ ÆÄÀÏ¿¡ Á¤ÀǵǾî ÀÖ´Â ´ÙÀ½ µÎ ÅÛÇø´ Ŭ·¡½º Áß Çϳª¸¦ »ó¼Ó¹ÞÀ¸¸é µÈ´Ù.
template<class Arg, class Result>
struct unary_function {
typedef Arg argument_type;
typedef Result result_type;
};
template<class Arg1, class Arg2, class Result>
struct binary_function {
typedef Arg1 first_argument_type;
typedef Arg2 second_argument_type;
typedef Result result_type;
};
ÀμöÀÇ °³¼ö¿¡ µû¶ó ´ÜÇ× ÇÔ¼ö °´Ã¼´Â unary_functionÀ» »ó¼Ó¹Þ°í ÀÌÇ× ÇÔ¼ö °´Ã¼´Â binary_functionÀ» »ó¼Ó¹Þ´Â´Ù. ÀÌ Å¬·¡½ºÀÇ ³»¿ëÀ» º¸¸é ¸â¹ö º¯¼ö³ª ¸â¹ö ÇÔ¼ö´Â ÀüÇô ¾ø°í Àμö¿Í ¸®Åϰª¿¡ ´ëÇÑ Å¸ÀÔ Á¤ÀÇ(typedef)¸¸À» °¡Áø´Ù. Ŭ·¡½º´Â ÁÖ·Î ¸â¹ö º¯¼ö³ª ¸â¹ö ÇÔ¼öµé·Î ±¸¼ºµÇÁö¸¸ ŸÀÔÀ̳ª »ó¼ö, ³»ºÎ Ŭ·¡½º, °¡»ó ÇÔ¼ö Å×ÀÌºí µîÀÇ ´Ù¸¥ ¿©·¯ °¡Áö °Íµéµµ °°ÀÌ Ä¸½¶ÈµÈ´Ù´Â °ÍÀ» ÀØÁö ¸»ÀÚ.
Àμö³ª ¸®ÅÏ Å¸ÀÔÀº ÇÔ¼ö °´Ã¼¿Í °ü·ÃÀÌ ÀÖ´Â Áß¿äÇÑ Á¤º¸Àε¥ ÀÌ Á¤º¸µéÀ» ÅÛÇø´ Àμö·Î Àü´Þ¹Þ¾Æ argument_type, result_type µîÀÇ À̸§À¸·Î ȹÀÏÈÇÏ¿© ŸÀÔ Á¤ÀÇÇÑ´Ù. ÀÌÇ× ÇÔ¼ö °´Ã¼´Â µÎ °³ÀÇ Àμö¸¦ °¡Áö¹Ç·Î first, second ÀμöÀÇ Å¸ÀÔÀ» °¢°¢ µû·Î Á¤ÀÇÇÑ´Ù. ÀÌ µÎ Ŭ·¡½º·ÎºÎÅÍ »ó¼Ó¹ÞÀ¸¸é ŸÀÔµéÀÌ ¹Ì¸® ¾à¼ÓµÈ À̸§À¸·Î Á¤ÀǵǹǷΠ¾î´ðÅÍ´Â ¾à¼ÓµÈ À̸§À¸·Î ÇØ´ç Á¤º¸¸¦ ½±°Ô ¾òÀ» ¼ö ÀÖ´Ù.
¾î´ðÅ͵éÀº ÇÔ¼ö °´Ã¼ÀÇ ±â´ÉÀ» º¯ÇüÇϱâ À§ÇØ ÀÌ Á¤º¸µéÀÌ ÇÊ¿äÇѵ¥ ÇÔ¼ö °´Ã¼°¡ ¾à¼ÓµÈ À̸§À¸·Î Á÷Á¢ ÀÌ Å¸ÀÔµéÀ» Á¤ÀÇÇØµµ »ó°ü¾ø´Ù. ±×·¯³ª ¾Æ¹«·¡µµ Á÷Á¢ Á¤ÀÇÇÏ´Â °ÍÀº ¹ø°Å·Î¿ì¹Ç·Î »ó±â µÎ Ŭ·¡½º·ÎºÎÅÍ »ó¼ÓÀ» ¹Þ´Â °ÍÀÌ Æí¸®ÇÏ´Ù. ¾î´ðÅ͸¦ Àû¿ëÇÒ Çʿ䰡 ¾ø´Ù¸é ±»ÀÌ ÀÌ Å¸ÀÔµéÀ» Á¤ÀÇÇÒ ÇÊ¿ä´Â ¾ø´Ù. functor ¿¹Á¦ÀÇ print ÇÔ¼ö °´Ã¼´Â ´Üµ¶À¸·Î »ç¿ëµÇ¹Ç·Î ÀÌ Å¸ÀÔµéÀ» Á¤ÀÇÇÏÁö ¾Ê¾Ò´Âµ¥ ¾î´ðÅÍ·Î »ç¿ëÇÏ·Á¸é ´ÙÀ½°ú °°ÀÌ Á¤ÀÇÇÏ´Â °ÍÀÌ ¿øÄ¢ÀÌ´Ù.
#include <functional>
struct print : public unary_function<int,void> {
void operator()(int a) const {
printf("%d\n",a);
}
};
unary_functionÀ¸·ÎºÎÅÍ »ó¼Ó¹ÞµÇ Àμö´Â int ŸÀÔÀÌ°í ¸®ÅÏ Å¸ÀÔÀº voidÀÓÀ» ÅÛÇø´ Àμö·Î ÁöÁ¤Çß´Ù. ÀÌ »ó¼Ó¿¡ ÀÇÇØ µÎ °³ÀÇ Å¸ÀÔÀÌ ¾à¼ÓµÈ À̸§À¸·Î Á¤ÀǵǸç print ÇÔ¼ö °´Ã¼¸¦ ´ÙÀ½Ã³·³ ¼±¾ðÇÏ´Â °Í°ú °°´Ù. argument_typeÀº int°¡ µÇ°í result_typeÀº void°¡ µÈ´Ù.
struct print {
typedef int argument_type;
typedef void result_type;
void operator()(int a) const {
printf("%d\n",a);
}
};
ÀÌ·¸°Ô ŸÀÔÀ» Á÷Á¢ Á¤ÀÇÇØµµ ¸¶Âù°¡ÁöÀÌÁö¸¸ ±ÍÂú±âµµ ÇÏ°í ¿ÀŸ°¡ ¹ß»ýÇÒ À§Çèµµ ÀÖÀ¸¹Ç·Î STLÀº ŸÀÔ Á¤ÀǸ¦ µµ¿ÍÁÖ´Â unary_function, binary_function ±â¹Ý Ŭ·¡½º¸¦ Á¦°øÇÏ´Â °ÍÀÌ´Ù. ¾îÂ÷ÇÇ ÀÌ Å¬·¡½ºµéÀº Å©±â°¡ 0À̹ǷΠ»ó¼ÓÀ» ¹Þ´Â´Ù ÇÏ¿© ¿ë·®»óÀÇ ºÒÀÌÀÍÀÌ ¹ß»ýÇÏ´Â °Íµµ ¾Æ´Ï´Ù. ±×·¡¼ ¾î´ðÅ͸¦ Àû¿ëÇÒ °èȹÀÌµç ¾Æ´Ïµç ÇÔ¼ö °´Ã¼ Ŭ·¡½º¸¦ Á¤ÀÇÇÒ ¶§´Â ÀÏ´Ü »ó¼ÓÀ» ¹Þ´Â °ÍÀÌ ÁÁ´Ù. plus, greater µîÀÇ ¹Ì¸® Á¦°øµÇ´Â ÇÔ¼ö °´Ã¼µéÀº ¸ðµÎ ÀÌ Å¬·¡½ºµé·ÎºÎÅÍ »ó¼Ó¹ÞÀ¸¹Ç·Î ¾î´ðÅ͸¦ Ç×»ó Àû¿ëÇÒ ¼ö ÀÖ´Ù.