±ÍÇÏ´Â ¼Õ´Ô À̽ʴϴÙ
·Î±×ÀÎ
ȸ¿ø°¡ÀÔ
  
  µ¨¸¶´ç °ø½Ä ÀºÇà°èÁÂ
  ÇϳªÀºÇà 227-910235-83607
  ¿¹±ÝÁÖ ÀÌ»ó±¹(¿î¿µÁø)
ÇÁ·ÎÁ§Æ® °Ô½ÃÆÇ
ÅõÇ¥°Ô½ÃÆÇ
µ¨¸¶´ç¼Ò°³
±âÃʺÎÅÍ È°¿ë±îÁö! µ¨ÆÄÀÌ ±³À° - µ¥ºê±â¾î
½Ã¸®Áî °­Á ½Ã¸®Áî °­Á ÀÔ´Ï´Ù.
±Û³»¿ë - ½Ã¸®Áî °­ÁÂ
 µ¨ÆÄÀÌ µðÀÚÀÎÆÐÅÏ °­Á - ÆÑÅ丮 ¸Þ¼­µå(FactoryMethod) ÆÐÅÏ
𸮺ê¶ó¿î
(±Ç±¤ÀÏ)
2019-04-28 ¿ÀÈÄ 11:42:22
3019ȸ Á¶È¸


÷ºÎÆÄÀÏ ´Ù¿î·Îµå
FactoryMethod.zip

¿À´ÃÀº µðÀÚÀÎ ÆÐÅÏÁß¿¡ °´Ã¼»ý¼ºÀ» ´ã´çÇϴ ÆÐÅÏ Áß ±âº»ÀÌ µÇ¸é¼­µµ °¡Àå ¸¹ÀÌ È°¿ëµÇ´Â

ÆÑÅ丮 ¸Þ¼­µå(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 ¸¦ °¡Á®´Ù ¾²´Â ÇÏÀ§ Ŭ·¡½ºÀÇ ¸ðÁ¶¸® ¹Ù²ã¾ß

   ÇÏ´Â ºÒÆíÇÔÀÌ ÀÖ´Ù. ÀÌ·±°æ¿ì ÆÑÅ丮¸¦ »ç¿ëÇÏ¸é ¾î´ÀÁ¤µµ ¼ö°í¸¦ µé ¼ö ÀÖ´Ù.

 

ÀÌ»óÀ¸·Î ÆÑÅ丮 ¸Þ¼­µå¿¡ ´ëÇØ ¾Ë¾Æ º¸¾Ò´Ù. ¿¹Á¦¼Ò½º¸¦ ¸¸µé¾î¼­ ÷ºÎÇØ µÎ¾úÀ¸´Ï,

¿¹Á¦¸¦ º¸¸é¼­ Á» ´õ È®½ÇÈ÷ Àڱ⠰ÍÀ¸·Î ¸¸µé±â¸¦ ¹Ù¶õ´Ù.