µé¾î°¡±âÀü ¸ÕÀú ¸»¾¸ µå¸®´Âµ¥, µðÀÚÀÎ ÆÐÅÏÁß Àü·«ÆÐÅÏÀº ´Ù¼Ò º¹ÀâÇÑ ÆÐÅÏÀ̹ǷÎ
ÀÌÇØÀÇ ¾î·Á¿òÀÌ ÀÖÀ» ¼ö ÀÖÀ¸´Ï °¡´ÉÇÑ ¿¹Á¦ ¼Ò½º¸¦ ÂüÁ¶ÇÏ¿© ÀÌÇظ¦ µ½±â ¹Ù¶ø´Ï´Ù.
À̹ø½Ã°£Àº Strategy ÆÐÅÏ¿¡ ´ëÇÑ °ÀÇ´Ù.
Strategy ÆÐÅÏÀ» ½±°Ô ÀÌÇØÇÏ´Â ¹æ¹ýÀº,
»ó¼ÓÀÇ ´ÜÁ¡ µÎ°¡Áö(ºÒÇÊ¿äÇÑ ±â´É»ó¼Ó, ´ÙÁß»ó¼Ó ºÒÇã) º¸¿ÏÇϱâ À§ÇÑ Interface ÀÇ »ç¿ë°ú Abstract ÆÐÅÏÀÇ
»ç¿ëÀ» ÅëÇÑ ¸Þ¼µåÀÇ ´ÙÇü¼º º¸ÀåÀÌ´Ù.
Strategy ÆÐÅÏ¿¡ ´ëÇØ ±¸±Û¸µÀ» ÇØ º¸¸é Abstract ÆÐÅϸ¸À» °Á¶ÇÏ¿© µµ½ÄÈ ÇØ ³õ°í Strategy ÆÐÅÏÀ̶ó°í ¾Ë·Á
ÁÖ´Â °÷ÀÌ ¸¹Àºµ¥, ÀÌ´Â À߸øµÈ ¼³¸íÀÌ´Ù.
Strategy ÆÐÅÏÀÇ ÁøÁ¤ÇÑ ¶æÀº ÀÚÁÖ ¹Ù²î´Â °³¹ß ¿ä±¸»çÇ׿¡ ´ëºñÇØ ÃÖ¼ÒÀÇ ºñ¿ëÀ» µé¿© Àü·«ÀûÀ¸·Î Äڵ尡
À¯¿¬¼ºÀ» °¡Áú ¼ö ÀÖµµ·Ï ¼³°èÇÏ´Â ±â¹ýÀÌ´Ù.
(ÄÚµåÀÇ À¯¿¬¼ºÀ̶õ ¸» ¾È¿¡´Â ±â´ÉÀÇ ±¸Çö¾øÀÌ ¿Ï¼ºµÈ ¸ðµâÀ» Àçºü¸£°Ô °¡Á®´Ù ¾µ¼ö ÀÖµµ·Ï ÇÏ´Â Àü·«µµ
Æ÷ÇԵȴÙ.)
¿¹¸¦ µé¾î Â÷¸¦ »ý»êÇϴµ¥,
Â÷ÀÇ ÇÁ·¹ÀÓÀº °íÁ¤µÇ¾î ÀÖÁö¸¸ Â÷¿¡ ºÎÂøµÇ´Â ¿É¼ÇÀº Â÷·® ÁÖ¹®ÀÚÀÇ ¿ä±¸¿¡ ÀÇÇØ ¼ö½Ã·Î ¹Ù²ï´Ù.
ÀÌ·²¶§ Á¦Á¶¿¡ ÇÊ¿äÇÑ ÁÖ¹®ÀÚÀÇ ¿ä±¸»çÇ׿¡¼ ¹þ¾î³ ¸ðµç ¿É¼ÇºÎÇ°ÀÌ µç °Å´ëÇÑ »óÀÚ¸¦ ÇÁ·¹ÀÓ ¿·¿¡ µÎ°í
Â÷¸¦ Á¶¸³ÇÏ´Â °ÍÀº °ø°£ÀûÀÎ ³¶ºñ¿Í ±âŸºñ¿ëÀÌ ¸¹ÀÌ µé »Ó ¾Æ´Ï¶ó ¼ö¸¹Àº ºÎÇ°Áß¿¡ ÇÊ¿äÇÑ ºÎÇ°À» ã´Âµ¥
(°¡µ¶¼º ¶³¾îÁü) ½Ã°£À» ¼Ò¸ðÇØ¾ß Çϱ⠶§¹®¿¡ »ý»ê¼º ¶ÇÇÑ ¶³¾îÁø´Ù.
ÀÌ·± °æ¿ì¸¦ ÇÁ·Î±×·¥¿¡¼´Â °£´ÜÇÑ ±â´É Çϳª¸¸ ÇÊ¿äÇѵ¥ ºÒÇÊ¿äÇÏ°Ô Super Class ¸¦ »ó¼Ó¹Þ¾Æ ¾´´Ù¶ó°í
Ç¥ÇöÇÑ´Ù. ¿¾¸»¿¡ "´ß Àâ´Âµ¥ ¼ÒÀâ´Â Ä® ¾´´Ù." ¶ó´Â ¸»ÀÌ ÀÌ °æ¿ìÀÌ´Ù.
°æ¿ì¿¡ OOP¿¡¼ »ó¼ÓÀÌ ÀÌ¿¡ ÇØ´çµÈ´Ù.
»ó¼ÓÀº °æ¿ì¿¡ µû¶ó ºñ¿ëÀÌ ¸¹ÀÌ µé¼ö ÀÖÀ¸¸ç, ´ÜÀÏ »ó¼Ó¹Û¿¡ µÇÁö ¾Ê´Â Ä¡¸íÀûÀÎ ´ÜÁ¡ ´ë¹®¿¡ ÄÚµåÀÇ À¯¿¬¼ºÀÌ
±Þ°ÝÇÏ°Ô ¶³¾îÁø´Ù. À̸¦ ÇØ°áÇϱâ À§Çؼ´Â ´ÙÁß»ó¼ÓÀÌ °¡´ÉÇÑ Interface ¾ê±â¸¦ »©³õÀ» ¼ö ¾ø´Âµ¥,
´ëºÎºÐÀÇ °ÁµéÀÌ ±×ºÎºÐÀ» °£°úÇÏ¿© ¼³¸íÇÏ°í ÀÖ´Ù.
¶ÇÇÑ, Interface ºÎºÐÀ» ¼³¸íÇÒ¶§ Interface ´Â ¿ø·¡ Á¤ÀǸ¸ ÇÏ°í Interface ¸¦ »ó¼Ó¹ÞÀº Ŭ·¡½º¿¡¼
¸ðµç °ÍÀ» ±¸ÇöÇÑ´Ù¶ó°í¸¸ ¼³¸íÇÏ°í ÀÖ¾î Stragy ÆÐÅÏÀ» ÀÌÇØÇϴµ¥ È¥¶õÀ» Áֱ⵵ ÇÑ´Ù.
ÇÏÁö¸¸, ÀÌ´Â ¾ö¿¬È÷ À߸øµÈ ¼³¸íÀÌ´Ù.
Strategy ÆÐÅÏÀº ¿Ï¼ºµÈ ±â´ÉµéÀ» °¡Áø ¸ðµâµéÀ» ¾î¶² ±¸Çöµµ ¾øÀÌ Àçºü¸£°Ô °¡Á®´Ù ¾µ¼ö ÀÖµµ·Ï ¼³°èÇÏ¿©¾ß
Strategy(Àü·«)ÆÐÅÏÀÌ °¡Áø À̸§°ªÀ» Á¦´ë·Î ÇÒ ¼ö ÀÖ´Â °ÍÀÌ´Ù.
±â´É ¸ðµÎ¸¦ Á÷Á¢±¸ÇöÇÏ¿©¾ß ÇÑ´Ù¸é ÀÌ ³ÇØÇÑ ÆÐÅÏÀ» ±»ÀÌ °¡Á®´Ù ¾²´Â ÀÌÁ¡ÀÌ ¹«¾ùÀ̶õ ¸»Àΰ¡?
ÀÌ´Â Strategy ÆÐÅÏ¿¡ ´ëÇÑ À߸øµÈ ¿ÀÇØÀÌ´Ù.
Áö±Ý ºÎÅÍ´Â ºñÀ¯¸¦ ¹Ù²Ù¾î »ó¼ÓÀÇ ´ÜÁ¡¿¡ ´ëÇØ Á»´õ »ó¼¼È÷ ¼³¸íÇÏ°Ú´Ù.
°¡Àå Å« ´ÜÁ¡Àº »óÀ§Å¬·¡½º¸¦ »ó¼Ó¹ÞÀº ÇÏÀ§Å¬·¡½º´Â ºÒÇÊ¿äÇÑ ±â´É±îÁö ¸ðÁ¶¸® »ó¼Ó¹Þ¾Æ¾ß ÇÑ´Ù´Â °ÍÀÌ´Ù.
Ŭ·¡½ºÀÇ µ¢Ä¡°¡ Ŭ°æ¿ì¿¡ ÀÌ°ÍÀº °æ¿ì¿¡ µû¶ó »ó´çÇÑ ÀÚ¿ø³¶ºñ°¡ µÉ ¼öµµ ÀÖ´Ù.
TClassA = class
ÇÊ¿äÇÑ ±â´É1;
ÇÊ¿äÇÑ ±â´É2;
ºÒÇÊ¿äÇÑ ±â´É;
end;
TClassB = class(TClassA)
ÇÊ¿äÇÑ ±â´É1;
ÇÊ¿äÇÑ ±â´É2;
ºÒÇÊ¿äÇÑ ±â´É;
....
end;
ÀÌ °æ¿ì Ŭ·¡½º»ó¼Ó¿¡¼ ºÒÇÊ¿äÇÑ ±â´ÉÀ» ¾ø¾Ö·Á¸é ºÒÇÊ¿äÇÑ ±â´ÉÀ» override ÇÏ´Â ¼ö ¹Û¿¡ ¾ø´Ù.
ÇÏÁö¸¸ ÀÌ·± °úÁ¤Àº »ó¼Ó¹Þ¾Æ°¡´Â ÇÏÀ§ Ŭ·¡½ºÀÇ Á¾·ù°¡ ¸¹À» °æ¿ì °ü¸®°¡ ¹«Ã´ Èûµé¾îÁö°Ô µÈ´Ù.
±×·³, override ¾ÈÇÏ°í ºÒÇÊ¿äÇÑ ±â´ÉÀ» Á¦°Å ÇÒ ¼ö ¾øÀ»±î?
¿ª¹ß»óÇÏ¿© ÇÊ¿äÇÑ ±â´É¸¸ °¡Á®´Ù ¾µ ¼ö ÀÖ´Â ¹æ¹ýÀ» ãÀ¸¸é µÉ °ÍÀÌ´Ù.
±×·¸°Ô ÇÒ·Á¸é ¾Æ·¡ °°Àº ÇüÅÂÀÇ ´ÙÁß»ó¼Ó ±¸Á¶°¡ ¼º¸³µÇ¾î¾ß ÇÑ´Ù.
TClassB = class(ÇÊ¿äÇÑ ±â´É1À» °¡Áø Ŭ·¡½º, ÇÊ¿äÇÑ ±â´É2¸¦ °¡Áø Ŭ·¡½º)
ÇÊ¿äÇÑ ±â´É1;
ÇÊ¿äÇÑ ±â´É2;
end;
ÇÏÁö¸¸, ¾Ö¼®ÇÏ°Ôµµ ¿ì¸®ÀÇ µ¨ÆÄÀÌ´Â ´ÙÁß»ó¼ÓÀÌ Áö¿øµÇÁö ¾Ê±â ¶§¹®¿¡ À§ ÇüÅ·δÂ
Ŭ·¡½º¸¦ ¼³°èÇÒ ¼ö ¾ø´Ù.
ÀÌ ¹®Á¦¸¦ ÇØ°áÇÏ·Á¸é Interface ¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù.
Interface ÀÚü ¼³¸í¸¸µµ ³»¿ëÀÌ ¹æ´ëÇϱ⠶§¹®¿¡ µû·Î ¼³¸íÇÏÁö´Â ¾Ê°Ú´Ù.
TClassB = class( ÇÊ¿äÇÑ ±â´É1À» °¡Áø Interface, ÇÊ¿äÇÑ ±â´É2¸¦ °¡Áø Interface )
ÇÊ¿äÇÑ ±â´É1;
ÇÊ¿äÇÑ ±â´É2;
end;
ÇÊ¿äÇÑ ±â´É1°ú 2´Â InterfaceÀÇ ¸Þ¼ÒµåÀÌ´Ù.
À§ °°Àº ÇüÅ·ΠÇؼ ÀÎÅÍÆäÀ̽º·Î ºÎÅÍ ²À ÇÊ¿äÇÑ ±â´Éµé¸¸ »ó¼Ó¹Þ¾Æ ¾µ ¼ö ÀÖ´Ù.
ÀÌ ºÎºÐ¿¡¼ ¾Æ±îÀü ºñÀ¯¸¦ µç ÀÚµ¿Â÷ ¿É¼ÇºÎÇ° ¾ê±â¸¦ ÀÌÇØÇÒ ¼ö ÀÖÀ¸¸®¶ó º»´Ù.
ÀÌ·¸°Ô µÇ¸é Á¦Á¶¿¡ ²À ÇÊ¿äÇÑ ºÎÇ°¸¸ ¿·¿¡ µÎ°í Á¶¸³ÇÑ´Ù°í ÇÒ ¼ö ÀÖ´Ù.
½ÇÁúÀûÀÎ »ç¿ë ¿¹·Î ¸¸µé¸é ´ÙÀ½°ú °°´Ù.
TClassB = class( TInterfacedObejct, ISpeak, IWork )
Speak; //ÇÊ¿äÇÑ ±â´É1 - ISpeak ÀÇ ¸Þ¼Òµå;
Work; //ÇÊ¿äÇÑ ±â´É2 - IWork ÀÇ ¸Þ¼Òµå;
end;
Interface °´Ã¼¸¦ »ý¼ºÇϱâ À§ÇØ TInterfacedObject Ŭ·¡½º¸¦ »ó¼Ó¹Þ°í
ISpeak¿Í IWork Interface ¸¦ ´ÙÁß »ó¼Ó¹Þ¾Ò´Ù.
Speak ±â´ÉÀº °æ¿ì¿¡ µû¶ó µ¿ÀûÀ¸·Î ±â´ÉÀÌ º¯°æ µÉ ¼ö ÀÖµµ·Ï ¸¸µé¾î¾ß Strategy ÆÐÅÏÀ» Á¦´ë·Î
±¸ÇöÇß´Ù°í ¸»ÇÒ ¼ö ÀÖ´Ù.
´Ù½Ã¸»ÇØ, »ç¿ëÀÚ°¡ Speak ¸¦ È£ÃâÇÏ´õ¶óµµ ¾î¶² °æ¿ì´Â Çѱ¹¸»À» ÇØ¾ß ÇÒ¶§µµ ÀÖ°í °æ¿ì¿¡ µû¶ó¼´Â
¿µ¾î¸¦ ¸»ÇØ¾ß ÇÒ¶§µµ ÀÖ´Ù´Â ¸»ÀÌ´Ù.
Çѱ¹¾î·Î ¸»Çϱâ¿Í ¿µ¾î·Î ¸»Çϱ⠱â´É±¸Çö Äڵ尡 ª´Ù¸é ¸ð¸£°ÚÁö¸¸ Äڵ尡 ¾öû³ª°Ô ±æ´Ù°í °¡Á¤ÇØ º»´Ù¸é
¿ÜºÎ ÀÎÅÍÆäÀ̽º ¸Þ¼Òµå ±Ô°Ý Speak ¸¦ ÁöÅ°¸é¼, ³»ºÎ±â´ÉÀº »ç¿ëÀÚÀÇ ¿ä±¸»çÇ׿¡ µû¶ó µ¿ÀûÀ¸·Î ´Ù¸¥
¸Þ¼µå¿¡¼ ÀÛµ¿µÉ ¼ö ÀÖµµ·Ï ÇÏ´Â ¹æ¹ýÀ» ã¾Æ¾ß ÇÑ´Ù.
ÀÌ¿¡ ´ëÇÑ ¼Ö·ç¼ÇÀº ´ÙÀ½°ú °°ÀÌ Ãß»óÈ ÆÐÅÏÀ» µµÀÔÇÏ´Â °ÍÀÌ´Ù.
ISpeak = interface
speak;
end;
TSpeakKorean = (TInterfacedObject, ISpeak)
speak;
end;
TSpeakEnglish = (TInterfacedObject, ISpeak)
speak;
end;
* TSpeakKorean°ú TSpeakEnglish ´Â ISpeak ¸¦ »ó¼Ó¹Þ¾Ò±â ¶§¹®¿¡ »óÈ£±³È¯ÀÌ °¡´ÉÇÏ´Ù.
ÀÌ·± Ãß»óÈ ±â¹ýÀº Ŭ·¡½º¿¡¼µµ °¡´ÉÇÏÁö¸¸, ´ÙÁß»ó¼ÓÀ» À§ÇØ ÀÎÅÍÆäÀ̽º¸¦ ¾´ ÀÌ»ó À§Ã³·³ ÀÎÅÍÆäÀ̽º·Î ÇØ°áÇØ¾ß ÇÑ´Ù.
Áö±Ý±îÁöÀÇ ¼³¸íÀ¸·Î ¿ì¸®´Â µÎ¸¶¸® Åä³¢¸¦ Àâ¾Ò´Ù.
ù°, ´ÙÁß»ó¼ÓÀ» ÅëÇÑ ¸ðµâÀ» ²È¾Æ ¾²´Â ¹æ½ÄÀ» äÅÃÇÔÀ¸·Î Ŭ·¡½º È®À强 È®º¸
µÑÀç, ÀÎÅÍÆäÀ̽º ¸Þ¼µåÀÇ Ãß»óȸ¦ ÅëÇÑ ¸Þ¼µåÀÇ µ¿Àû±â´É ¼±Åà À¯¿¬¼º È®º¸
¸¶Áö¸·À¸·Î ²À ÇÊ¿äÇÑ°Ô Àִµ¥, ±×°ÍÀº ¹Ù·Î ¿Ï¼ºµÈ ¸ðµâÀ» ¾î¶»°Ô ²È¾Æ ¾²´Â°¡ ÇÏ´Â °ÍÀÌ´Ù.
¿ì¸®°¡ Inteface ¶ó´Â ¸»À» µéÀ»¶© Á¤ÀǸ¸ ÇÏ°í ±¸ÇöÇÒ ¼ö ¾ø´Ù¶ó°í ¹è¿ü´Ù.
±×·¡¼ À§ °°Àº ¹æ¹ýÀ¸·Î ÇÁ·Î±×·¥À» Â¥´õ¶óµµ ±â´É±¸ÇöÀº °á±¹ ÃÖÁ¾ Ŭ·¡½º »ç¿ëÀÚÀÇ ¸òÀÌ ¾Æ´Ñ°¡ ¶ó°í
»ý°¢ ÇÒ ¼ö ÀÖ´Ù.
¸¸ÀÏ À̱ÛÀ» º¸°í °è½Å ´ç½Åµµ °°Àº »ý°¢À̶ó¸é Çϳª ¹°¾îº¸ÀÚ!
DirectX ´Â Interface ¸¦ ÀÌ¿ëÇÑ COM ±â¼ú·Î ¸¸µé¾î Á® ÀÖ´Ù.
Interface ¸¦ 썻À¸´Ï DirectX ¸¦ ´ç½ÅÀÌ ¸ðÁ¶¸® ±¸ÇöÇÏ¿© ½á¾ß Çϴ°¡?
³ª´Â ´äÇÏ°í ½Í´Ù. ±×°É ³»°¡ ´Ù ±¸ÇöÇÒ ÁÙ ¾Ë¸é MS ¿¡ ÃëÁ÷ÇÏÁö ÀÌÀÚ¸®¿¡ Àְڳİí?
¿©±â¼ ¿ì¸®´Â ²À Çϳª ¾Ë¾Æ¾ß ÇÒ »ç½ÇÀÌ ÀÖ´Ù.
Interface ÀÇ Á¤ÀÇ¾ß ¾îÂî µÇ¾ú°Ç Interface ÀÇ È°¿ëÀº ±×·¸°Ô »ý°¢ÇÏ¸é ¿À»êÀ̶õ °ÍÀÌ´Ù.
Interface ÀÇ ÃÖÁ¾¸ñÀûÀº °³¹ß¾ð¾î¿¡ »ó°ü¾øÀÌ ÀÌ¹Ì ¿Ï¼ºµÈ ±â´ÉÀ» ½±°Ô °¡Á®´Ù ¾²±â À§ÇÔ¿¡ ÀÖ´Â °ÍÀÌÁö,
Á¤ÀǸ¸ ÇÏÀÚ°í ¸¸µé¾î µÐ °³³äÀÌ Àý´ë ¾Æ´Ï´Ù.
Á¤ÀǸ¸ ÇÏÀÚ°í ±×°É ¸¸µé¾úÀ¸¸é »ý»ê¼ºÀÌ ¾ø¾îµµ ³Ê¹« ¾ø°Ô µÈ´Ù.
Çؼ, ÷ºÎÆÄÀÏ¿¡ Inteface ŸÀÔÀÇ °´Ã¼¸¦ Interface ¸¦ °¡Áö°í ¾î¶»°Ô °¡Á®´Ù ¾²´ÂÁö¿¡ ´ëÇÑ
°£´ÜÇÑ ¿¹Á¦¸¦ ¸¸µé¾î ¿Ã·Á µÎ¾úÀ¸´Ï ÂüÁ¶ÇÏ¿© º¸±â ¹Ù¶õ´Ù.
º»ÀÎÀÌ ±Û ÀçÁÖ°¡ ºÎÁ·ÇÏ¿© Strategy ÆÐÅÏ¿¡ ´ëÇÑ ºÎÁ·ÇÑ ºÎºÐÀº ÄÚµå·Î ´ë½ÅÇÏ¿´À¸¸é ÇÑ´Ù.
±ä ±Û Àоî Áּż °¨»çÇÕ´Ï´Ù.