factory method pattern
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.


Replace original file
Rename if it already exist

Factory Method Pattern

ÀϹÝÀûÀÎ »óȲ

factory´Â °øÀåÀ» ÀǹÌÇÑ´Ù. °øÀåÆÐÅÏ? ÀÌ ÆÐÅÏÀº °øÀåÀÇ ÀÛµ¿¹æ½ÄÀ» »ý°¢Çغ¸¸é ¾î·ÆÀÝ°Ô ÀÌÇØÇÒ ¼ö ÀÖ´Â ÆÐÅÏÀÌ´Ù. ¼ÒÇÁÆ®¿þ¾î °³¹ßÀÌ ¾Æ´Ñ ¿µ¿ª¿¡µµ ³Î¸® ¾²ÀÌ´Â ÆÐÅÏÀÌ´Ù.

°øÀåÀº ÇÊ¿äÇÑ ÀÚ¿ø°ú ¼³ºñ¸¦ °®Ãß°í ÀÖÀ¸¸ç, À̵é ÀÚ¿ø°ú ¼³ºñ¸¦ ÀÌ¿ëÇØ¼­ ƯÁ¤ÇÑ °´Ã¼¸¦ »ý»êÇÒ ¼ö ÀÖ´Â ½Ã¼³ÀÌ´Ù. ¸¸¾à¿¡ ¿ÀÅä¹ÙÀ̸¦ ¸¸µå´Â °øÀåÀ̶ó°í Çϸé, ÀÌ °øÀåÀº ´ÜÀÏ ºê·£µåÀÇ ¿ÀÅä¹ÙÀ̸¸ »ý»êÇØ³»Áö´Â ¾ÊÀ» °ÍÀÌ´Ù. ±×·¸°Ô °øÀåÀ» ¼³°èÇÒ¸®µµ ¾øÀ» °ÍÀÌ´Ù. ºÐ¸íÈ÷ ´Ù¾çÇÑ ´Ù¾çÇÑ ¿ëµµÀÇ ¿ÀÅä¹ÙÀ̸¦ »ý»êÇØ³¾ ¼ö ÀÖ°Ô²û ¼³°èÇÒ °ÍÀÌ´Ù

ÀÌ·¸°Ô ÇØ¼­ ¾òÀ» ¼ö ÀÖ´Â ÀÕÁ¡Àº ¿©·¯°³ÀÇ ºñ½ÁÇÑ °øÁ¤À» °¡Áö´Â ½Ã¼³À» ¿©·¯°³ °¡Áö°í ÀÖÀ» Çʿ䰡 ¾ø´Ù´Â Á¡ÀÌ µÉ °ÍÀÌ´Ù. ½ºÀ§Ä¡¸¸À» ÀÌ¿ëÇØ¼­ ºñ±³Àû °£´ÜÇÏ°Ô ´Ù¾çÇÑ Á¦Ç°À» »ý»êÇÒ ¼ö ÀÖ´Ù. À̸¦ ¼ÒÇÁÆ®¿þ¾î¿¡ ±×´ë·Î ÀÀ¿ëÇÑ°Ô factory method patternÀÌ´Ù.

factoryMethod.png

»óȲ±Ø

  • ¹® : ±×·¡¿ä. ¾Ë¾ÒÀ¸´Ï factory patternÀÇ Çö½ÇÀû ¿¹¸¦ Á» µé¾îÁÖ¼¼¿ä. ¾Æ¹«·¡µµ ÀÌÇØ°¡ Á».
  • ´ä : ¾î¶² Á¦Ç°À» ¸¸µç´Ù°í Çϸé, ÆÄ»ýµÇ´Â Á¦Ç°ÀÌ ÀÖÀ»°Å¿¡¿ä. ÀÌ Á¦Ç°ÀÌ °øÀå¿¡¼­ ¸¸µé¾îÁø´Ù¸é, ÆÄ»ýµÇ´Â Á¦Ç°±îÁö¸¦ ÇϳªÀÇ °øÀå¿¡¼­ »ý»êÇØ³¾ ¼ö ÀÖµµ·Ï ÇØ¾ß °ÚÁÒ ?
  • ¹® : ±×·±°¡¿ä ?
  • ´ä : ±×·¸ÁÒ. ÆÄ»ý Á¦Ç°À̶ó´Â°Ô µ¿ÀÏÇÑ ÀÚ¿ø°ú ¼³ºñ¸¦ ÇÊ¿ä·Î ÇÒ°ÅÀݾƿä. °øÁ¤¸¸ ¾à°£ ´Ù¸¥ ½ÄÀÌÁÒ. ±×·¸´Ù¸é, ÇϳªÀÇ °øÀå¿¡¼­ ¿©·¯°³ÀÇ °øÁ¤À» ¼öÇàÇÒ ¼ö ÀÖµµ·Ï ¹ü¿ë°¡´ÉÇÏ°Ô ¸¸µå´Â°Ô ÈξÀ ÀÌÀÍÀÌÁÒ. ºñ½ÁÇÑ °øÀåÀ» 2-3°³¾¿ ¸¸µé¸é ¾öû³­ ³¶ºñ ¾Æ´Ï°Ú¾î¿ä ?
  • ¹® : À½ ±×·¸°Ú±º¿ä. ¿ÀÅä¹ÙÀÌ °øÀåÀ̶ó¸é, ¿ÀÅä¹ÙÀÌ¿¡¼­ ÆÄ»ýµÇ´Â°Ô Á¦Ç°ÀÌ ½ºÄíÅÍ, ¼ÒÇü, ÁßÇü, Áß´ëÇü ±×¸®°í ¸ñÀû¿¡ µû¶ó ¿©·¯°¡Áö°¡ ¸¸µé¾îÁø´Ù°í ÇßÀ» ¶§ ½ºÀ§Ä¡ Á¶ÀÛÁ¤µµ·Î ¿©·¯°³ÀÇ Á¦Ç°À» »ý»êÇØ³¾ ¼ö ÀÖµµ·Ï ÇÑ´Ù ¹¹ ±×·±°Å³×¿ä ?
  • ´ä : ³× ¸Â¾Æ¿ä.
  • ¹® : À½. °´Ã¼ÁöÇâ ÇÁ·Î±×·¡¹ÖÀ¸·Î º¸ÀÚ¸é class motocycle °¡ ¸¸µé¾îÁö°í, ¿©±â¿¡¼­ »ó¼ÓµÇ¾î¼­ cycle200cc, cycle300cc, batcar, roadrunner Ŭ·¡½º°¡ »ý¼ºµÇ´Â ÇüŰڱº¿ä.
  • ´ä : ³×. ¾ÆÁÖ ÁÁÀº ¿¹ÀΰŠ°°³×¿ä. ´õºÒ¾î ¿£Áø,ÇÁ·¹ÀÓ,Á¶¸³µîÀÇ ¸Þ¼­µåµéÀ» °¡»óÇÔ¼ö·Î ¸¸µé¾î¼­ »ó¼ÓµÈ Ŭ·¡½º¿¡¼­ ±¸ÇöÇϵµ·Ï ÇÒ ¼ö ÀÖ°ÚÁÒ. ¶ÇÇÑ º´·Äó¸®Çϴµ¥¿¡µµ À¯¿ëÇϰÚÁÒ ? ÇѶóÀο¡¼­´Â cycle200cc¸¦ ¸¸µé°í ´Ù¸¥ ¶óÀο¡¼­´Â cycle300cc¸¦ ¸¸µå´Â µîÀ¸·Î ¸»ÀÌÁÒ.
  • ¹® : (¾à°£ ¿ìÂáÇØÁ³À½) factory fattern À̶ó´Â °Íµµ ±×¸® ¾î·Á¿î°Ç ¾Æ´Ï±º¿ä.
  • ´ä : ³×. ÀÏ»ó»ýȰ¿¡¼­ ÈçÈ÷ °æÇèÇÒ ¼ö ÀÖ´Â °ÍµéÀÌ¿¡¿ä. À̸§À» ºÙÀÌ°í ºÙÀÌÁö ¾Ê´Â°Ô ±×·¡¼­ Áß¿äÇÏÁÒ. ü°èÀûÀ¸·Î Á¤¸®Çϰí, È¿À²ÀûÀ¸·Î ¼ÒÅëÇÒ ¼ö ÀÖµµ·Ï µµ¿ÍÁִϱî¿ä.
  • ¹® : ±×·¸°Ú³×¿ä. factory fatternÀ» À§Çؼ­ ±¸±¸ÀýÀýÇÏ°Ô ¼³¸íÇÏ´Â °Íº¸´Ù. ÆÐÅÏÀÇ Àǹ̸¦ ¾Ë°í ÀÖ´Ù¸é, ÈξÀ °£´ÜÇÏ°Ô ÀÇ»ç¼ÒÅëÀÌ °¡´ÉÇϰڱº¿ä.

Ȱ¿ë

  • ÆÑÅ丮 ÆÐÅÏÀº ŸŶÀ̳ª ÇÁ·¹ÀÓ¿öÅ©ÀÇ ¶óÀ̺귯¸®¿¡¼­, ÁÖ¾îÁö´Â ÀÎÀÚ¿¡ µû¶ó¼­ ´Ù¸¥ °´Ã¼¸¦ »ý¼ºÇؼ­ ³Ñ°ÜÁÖ°íÀÚ ÇÒ¶§ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

»ç¿ë¿¹

Image Reader¸¦ À§ÇÑ Å¬·¡½º¸¦ ¸¸µå´Â °æ¿ì¸¦ »ý°¢Çغ¸ÀÚ. ÀÌ Å¬·¡½º´Â ¿©·¯°¡Áö À̹ÌÁö¸¦ ÀÐÀ» ¼ö ÀÖ¾î¾ß ÇÒ °ÍÀÌ´Ù. ±×·¸´Ù¸é, À̹ÌÁö ŸÀÔÀ» ÀÎÀÚ·Î ¹Þ¾ÆµéÀ̰í ÇØ´ç À̹ÌÁö¸¦ ó¸®ÇÒ ¼ö ÀÖ´Â °´Ã¼¸¦ »ý¼ºÇؼ­ ¸®ÅÏÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
#include <iostream> 
#include <stdio.h> 
 
#define GIF 1 
#define JPG 2  
#define PNG 3 
 
using namespace std; 
 
class ImageReader 
{ 
    public: 
        virtual void decode() = 0; 
}; 
 
class GIFReader: public ImageReader 
{ 
    public : 
        void decode() {cout << "GifReader RUN" << endl;} 
}; 
 
class JPGReader: public ImageReader 
{ 
    public : 
        void decode() {cout << "JPGReader RUN" << endl;} 
}; 
 
class PNGReader: public ImageReader 
{ 
    public : 
        void decode() {cout << "PNGReader RUN" << endl;} 
}; 
 
class ImageReaderFactory 
{ 
    private: 
        int ImageType; 
    public: 
        void setImageType(int type) 
        { 
            ImageType = type; 
        } 
        ImageReader* getImageReader(int type) 
        { 
            setImageType(type); 
            switch(type) 
            { 
                case GIF: 
                    return new GIFReader();   
                case JPG: 
                    return new JPGReader();   
                case PNG: 
                    return new JPGReader();   
                default: 
                    break; 
            } 
        } 
}; 
 
// Å×½ºÆ®¿ë Main ÄÚµå 
int main(int argc, char **argv) 
{ 
    ImageReaderFactory * myReaderFactory; 
    ImageReader *myReader; 
 
    myReaderFactory = new ImageReaderFactory; 
    myReader = myReaderFactory->getImageReader(PNG); 
    myReader->decode(); 
} 
 


category_C++
category__2
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.