¿À´ÃÀº µðÀÚÀÎ ÆÐÅÏÁß¿¡ °´Ã¼»ý¼ºÀ» ´ã´çÇÏ´Â ÆÐÅÏ Áß ±âº»ÀÌ µÇ¸é¼µµ °¡Àå ¸¹ÀÌ È°¿ëµÇ´Â
ÆÑÅ丮 ¸Þ¼µå(Factory Method) ÆÐÅÏ¿¡ ´ëÇØ ¾Ë¾Æº¸ÀÚ.
±âº»ÀÌ µÇ´Â ÆÐÅÏÀ̶ó°í´Â ÇÏÁö¸¸, °³³äÀ» Á¦´ë·Î ¾Æ´Â »ç¶÷µéÀÌ ´õ¹°¾î ºí·Î±×³ª À¯Æ©ºê °°Àº°÷¿¡¼
À߸øµÈ °Á¸¦ ¿Ã·Á³õÀº »ç¶÷µéÀÌ Çã´ÙÇÏ´Ù.
¾Æ¹¸µç ÆÑÅ丮 ¸Þ¼µå¿¡ ´ëÇØ Áö±ÝºÎÅÍ »ó¼¼È÷ ¼³¸íÇÏ°Ú´Ù.
¸ÕÀú ¿ë¾îÁ¤¸® ºÎÅÍ ÇÏÀÚ.
ÆÑÅ丮 ¸Þ¼µå´Â = ÆÑÅ丮 + ¸Þ¼µå ÀÇ ÇÕ¼º¾î Àε¥, ¿©±â¼ ¸»ÇÏ´Â
ÆÑÅ丮(Factory) ¶õ ¸»À» °øÀåÀ̶õ Àǹ̷ΠÀÌÇØÇÏ´Â »ç¶÷µéÀÌ ¸¹Àºµ¥ , ÆÐÅÏ°Á¿¡¼´Â °øÀåÀ̶õ ¸»´ë½Å
"¾î¶² Ŭ·¡½ºÀÇ °´Ã¼¸¦ ´ë½Å »ý¼ºÇØ Áִ Ư¼öÇÑ Å¬·¡½º" ¶ó°í ¾Ë°í Àֱ⠹ٶõ´Ù.
¸Þ¼µå´Â ¸»±×´ë·Î ±× Ư¼öÇÑ Å¬·¡½ºÀÇ ¸Þ¼µå¸¦ ÀǹÌÇÑ´Ù.
¿ì¸®´Â ÀÌ ¸â¹ö ¸Þ¼µå¸¦ È£ÃâÇÏ¿© Ŭ·¡½ºÀÇ °´Ã¼¸¦ °¡Á®¿Ã °ÍÀÌ´Ù. ÀÚ¼¼ÇÑ ³»¿ëÀº À̵û°¡ º¸°í,
ÀÌ·± ¿¬À¯·Î ÆÑÅ丮 ¸Þ¼µå¶õ ¸»ÀÌ ³ª¿Â °ÍÀÌ´Ù.
ÆÑÅ丮 ¸Þ¼µå´Â ÀÌÇØÇϱâ À§Çؼ´Â ´ÙÀ½ÀÇ Äڵ带 º¸¾Æ¾ß ÇÑ´Ù.
´ÙÀ½ÀÇ Äڵ忡¼ À¯½ÉÈ÷ º¸¾Æ¾ß ÇÒ °ÍÀº abstract °¡ ºÙ¾î Àִ Ŭ·¡½ºÀÇ »ý¼ºÀÚÀÌ´Ù.
TObj = class
public
Constructor Create; Virtual; Abstract;
end;
ÀÌ Å¬·¡½º TObj.Create ¿Í °°Àº ¹æ½ÄÀ¸·Î °´Ã¼¸¦ »ý¼º ÇÒ ¼ö ¾ø´Ù. ±×ÀÌÀ¯´Â »ý¼ºÀÚ¿¡
Abstract Ãß»óÈ Áö½Ã¾î°¡ ºÙ¾î Àֱ⠶§¹®ÀÌ´Ù. ÆÐÅÏ°Á¸¦ º¼ Á¤µµ¸é Ãß»óÈ¿¡ ´ëÇØ
¾î´ÀÁ¤µµ ¾Æ½Ã°ÚÁö¸¸, ÀÌ Áö½Ã¾î°¡ ºÙ°Ô µÇ¸é ¸Þ¼µå Á¤ÀǸ¸ ÇÒ»Ó ±¸ÇöÀº ÇÏÀ§Å¬·¡½º¿¡¼
ÇÏ¿©¾ß ÇÑ´Ù´Â ¿øÄ¢ÀÌ Àû¿ëµÈ´Ù.
´Ù½Ã¸»ÇØ ÀÌ Å¬·¡½º¸¦ ½á ¸ÔÀ¸·Á¸é ´Ù¸¥ Ŭ·¡½º°¡ ÇÊ¿äÇÏ´Ù´Â ¾ê±â°¡ µÈ´Ù.
±×·¡¼ ÀÌ Å¬·¡½º¸¦ ½á ¸ÔÀ» ¼ö ÀÖ´Â ´Ù¸¥ Ŭ·¡½º Çϳª¸¦ ¸¸µéÀÚ.
TFactoryObj = class(TObj)
private
constructor Create;override;
public
class function GetObj : TObj;//¾ê°¡ ¹Ù·Î Factory Method ´Ù. °´Ã¼¸¦ »ý¼ºÇؼ ¸®ÅÏÇÑ´Ù.
end;
À§ Ŭ·¡½ºÀÇ ¿ªÈ°Àº TObj °´Ã¼¸¦ »ý¼º½ÃÄÑ GetObj ÀÇ ¹Ýȯ°ªÀ¸·Î µ¹·Á ÁÖ´Â ¿ªÈ° ¹Û¿¡´Â ÇÏÁö ¾Ê´Â´Ù.
Abstract ÀÎ TObj.Create ¸¦ Á÷Á¢±¸ÇöÇϱâ À§ÇØ override ¸¦ »ç¿ëÇß´Ù. ÀÌ°ÍÀ» Àü¹®¿ë¾î·Î ConCreate ¶ó ÇÑ´Ù.
GetObj ¾Õ¿¡ class (Static Method) ¸¦ ºÙÀÎ ÀÌÀ¯´Â Ŭ·¡½º °´Ã¼ »ý¼ºÀ» À§ÇØ ¶ÇÇϳªÀÇ Å¬·¡½º °´Ã¼¸¦
»ý¼ºÇÑ´Ù´Â °ÍÀÌ »ó´çÈ÷ ¹«ÀǹÌÇÑ ÀÏÀ̱⠶§¹®ÀÌ´Ù. class ¸¦ ºÙÀÌ°Ô µÇ¸é °´Ã¼»ý¼º °úÁ¤À» »ý·« ÇÒ ¼ö ÀÖ´Ù.
Áö±Ý±îÁöÀÇ ³»¿ëÀÌ ÆÑÅ丮 ¸Þ¼µåÀÇ ÇÙ½ÉÇüÅÂÀÌ´Ù. ÀÌ ÀÌ»óµµ ÀÌÇϵµ ¾ø´Ù. ÀÌ·¸°Ô¸¸ º¸¸é Á¤¸» °£´ÜÇÑ°Í
°°Àºµ¥ ÀÌ°É ÀÌ °³³äÀ» À߸ø ÆľÇÇÏ´Â ÀÖ´Â »ç¶÷µéÀÌ Å¹ÝÀÎ °ÍÀÌ ½ÇÈ´Ù.
´Ù½ÃÁ¤¸®ÇÏÀÚ¸é, ¾î¶² Ŭ·¡½º(TObj) °¡ Àִµ¥, ÀÌ Å¬·¡½ºÀÇ »ý¼ºÀÚ°¡ Abstract ¶ó´Â ÀÌÀ¯ ¶§¹®¿¡
TObj.Create ¿Í °°Àº ¹æ½ÄÀ¸·Î °´Ã¼¸¦ Á÷Á¢ »ý¼º ÇÒ ¼ö ¾ø´Ù. Çؼ °´Ã¼¸¦ ´ë½Å »ý¼ºÇØÁִ Ŭ·¡½º¸¦
¸¸µçÈÄ ±× Ŭ·¡½ºÀÇ ¸Þ¼µå¿¡ °´Ã¼¸¦ »ý¼ºÇØ ´Þ¶ó°í ¿äûÇØ¾ß Çϴµ¥, ±× ¿äûÀ» ó¸®ÇØ ÁÖ´Â ³à¼®ÀÌ
¹Ù·Î Factory Method ¶õ ¾ê±â´Ù.
Factory Method ¿¡ ´ëÇÑ ±¸Á¶ÆľÇÀº ÀÌÂë¿¡¼ Àß µÇ¾úÀ¸¸®¶ó º»´Ù.
±×·±µ¥ À̵ý ÁþÀ» ¿Ö ÇÏ´Â °ÍÀϱî? Ŭ·¡½º¸¦ Á÷Á¢ »ý¼ºÇؼ ¾²¸é µÇÁö ¿Ö ÆÑÅ丮 ¸Þ¼µå¶õ °³³äÀ» µÎ¾î
°´Ã¼¸¦ »ý¼ºÇØ¾ß ÇÏ´Â °ÍÀϱî? ´ÙÀ½°ú °°Àº ÀÌÀ¯¸¦ µé¼ö ÀÖ°Ú´Ù.
1. °´Ã¼ÀÇ Ä¸½¶È
°´Ã¼ÀÇ Ä¸½¶È¶õ ¸»Àº ½±°Ô ¸»ÇØ °´Ã¼¸¦ Àº´Ð½ÃÅ°´Â °ÍÀÌ´Ù. Ŭ·¡½º¸¦ °´Ã¼È Çؼ »ç¿ëÇÏ´Â
»ç¿ëÀÚ¿¡°Ô °´Ã¼°¡ ¾î¶²½ÄÀ¸·Î »ý¼ºµÇ´ÂÁö ±»ÀÌ ¾Ë¸®°í ½ÍÁö ¾ÊÀ» ¶§°¡ ÀÖ´Ù. ¾Æ´Ï ¾ËÇÊ¿ä°¡
¾øÀ¸´Ï ½Å°æ¾²Áö ¸»¶ó°í ÇÏ°íÇà ¶§°¡ ÀÖ´Ù. ÀÌ·± °æ¿ì ÃÖÁ¾ÀûÀ¸·Î »ý¼ºµÈ °´Ã¤¸¸À» ³Ñ°ÜÁÖ´Â Çü½ÄÀ»
ÃëÇϹǷνá Àº´Ð¼ºÀ» °¡Áú ¼ö ÀÖ´Ù.
2. ½Ì±ÛÅæÀÇ °³³äó·³ °´Ã¼ÀÇ »ý¼ºÀ» »ç¿ëÀÚÀÇ ÆíÀÇ¿¡ ¸Â°Ü¼´Â ¾ÈµÇ´Â °æ¿ì°¡ ÀÖ´Ù.
¿¹¸¦ µé¾î ÇÁ·Î±×·¥³»¿¡¼´Â TObj ÀÇ °´Ã¼°¡ µü 5°³±îÁö¸¸ »ý¼ºÀÌ Çã¿ëµÇ¾î¾ß ÇÑ´Ù°í °¡Á¤Çϸé
TObj.Create ¸¦ ¸· »ç¿ëÇÏ°Ô µÇ¸é °´Ã¼ÀÇ »ý¼ºÀÌ ¹«ºÐº°ÇÏ°Ô µÇ¾î ¾î¶² ¹®Á¦°¡ ÃÊ·¡µÉ ¼öµµ ÀÖ±â
¶§¹®ÀÌ´Ù. ÀÌ·±°æ¿ì ÆÑÅ丮 ¸Þ¼µå°¡ °´Ã¼ÀÇ »ý¼ºÀ» ÅëÁ¦ÇÏ´Â ¿ªÈ°À» ÇÒ ¼ö ÀÖ´Ù.
3. TObj ÀÇ »ý¼ºÀÚÀÇ ¸Å°³º¯¼öÀÇ Çüųª °¹¼ö°¡ ¹Ù²î¸é TObj ¸¦ °¡Á®´Ù ¾²´Â ÇÏÀ§ Ŭ·¡½ºÀÇ ¸ðÁ¶¸® ¹Ù²ã¾ß
ÇÏ´Â ºÒÆíÇÔÀÌ ÀÖ´Ù. ÀÌ·±°æ¿ì ÆÑÅ丮¸¦ »ç¿ëÇÏ¸é ¾î´ÀÁ¤µµ ¼ö°í¸¦ µé ¼ö ÀÖ´Ù.
ÀÌ»óÀ¸·Î ÆÑÅ丮 ¸Þ¼µå¿¡ ´ëÇØ ¾Ë¾Æ º¸¾Ò´Ù. ¿¹Á¦¼Ò½º¸¦ ¸¸µé¾î¼ ÷ºÎÇØ µÎ¾úÀ¸´Ï,
¿¹Á¦¸¦ º¸¸é¼ Á» ´õ È®½ÇÈ÷ Àڱ⠰ÍÀ¸·Î ¸¸µé±â¸¦ ¹Ù¶õ´Ù.