µðÀÚÀÎ ÆÐÅÏ(3) - °´Ã¼ »ý¼ºÀÇ ¶Ç ´Ù¸¥ ¹æ¹ý
À̽ÂÀÏ
|
°´Ã¼ÁöÇâ ´º½º·¹ÅÍ 2È£¿¡¼ºÎÅÍ º»°ÝÀûÀÎ ÆÐÅÏ¿¡ ´ëÇÑ À̾߱⸦ Çß´Ù. ȤÀÚ´Â µµ¿òÀº µÇ¾ú´Âµ¥ ¸¹Àº ³»¿ëÀÌ ¾ø¾î¼ Á» ½Ç¸ÁÇß´Ù´Â ¸ÞÀÏÀ» ÇÊÀÚ¿¡°Ô º¸³»Áֱ⵵ Çß´Ù. »ç½Ç ÆÐÅÏ¿¡ ´ëÇÑ ±¸Ã¼ÀûÀÎ ³»¿ë¸¸À¸·Î´Â º° ³»¿ëÀÌ ¾ø´Â °ÍÀÌ »ç½ÇÀ̾ú´Ù. ±¸Áö º¯¸íÀ» ÇÏÀÚ¸é ±× ÀÌÀ¯´Â ÀÌ·¸´Ù. Áö³ È£¿¡ Àß ¾Ë·ÁÁø ÆÐÅÏÇϳª¸¸À» °¡Áö°í À̾߱⸦ ÇÑ °ÍÀº ÇÊÀÚÀÇ °ÔÀ¸¸§µµ ÀÖ¾úÁö¸¸, ¾î´Â Á¤µµ ÀǵµÀûÀ̾ú´Ù. ÇÑ ¹ø¿¡ ¿©·¯ °¡Áö ÆÐÅÏÀ» ÀÌ·¯Äô Àú·¯Äô À̾߱⸦ Çϸé ÆÐÅÏÀÌ ¹«¾ùÀ̳Ŀ¡ ´ëÇÑ ±¸Ã¼ÀûÀÎ À̾߱⸦ ÇÏ°í ³Ñ¾î°¡¾ß ÇÏ´Â ½ÃÁ¡¿¡¼ ±× ÇÙ½ÉÀÌ Èå·ÁÁú ¼ö ÀÖ´Ù´Â »ý°¢¿¡¼¿´´Ù. º»°ÝÀûÀÎ À̾߱⸦ ½ÃÀÛÇÏ´Â °ÍÀ̹ǷΠù È£¿¡ µÕ±×·¸°Ô À̾߱âÇÑ ÆÐÅÏÀÌ ½ÇÀç·Î ÀÌ·± °ÍÀ̶ó´Â °ÍÀ» ¸ø¹Ú°í ½ÍÀº ¿å½ÉÀÌ ÀÖ¾ú±â ¶§¹®À̾ú´Ù. ÆÐÅÏ¿¡ ´ëÇÑ À̾߱â´Â ¸¹ÀÌ µé¾ú´Âµ¥ ±¸Ã¼ÀûÀ¸·Î ±× °ÍÀÌ ¹«¾ùÀ» ÀǹÌÇÏ´ÂÁö ±Ã±ÝÇØ¿Ô´ø ºÐµé¿¡°Ô µµ¿òÀÌ µÇ¾ú´ÂÁö ¸ð¸£°Ú´Ù. ÀÌ ¹øÈ£ºÎÅÍ´Â ÆÐÅÏÀÌ ¹«¾ùÀ̳Ŀ¡ ´äÇϱâ À§ÇÑ °üÁ¡¿¡¼ ±ÛÀ» ÁøÇàÇϱ⠺¸´Ù´Â ÇÊÀÚ°¡ Áö³ È£¿¡¼ °³ÀÎÀûÀÎ ÆÐÅÏ ¼±ÅÃÀÇ ±âÁØÀÎ ¡®°´Ã¼ÁöÇâ ÇÁ·Î±×·¡¹Ö ¾ð¾î¸¦ »ç¿ëÇÏ¿© ½Ã½ºÅÛÀ» °³¹ßÇÏ°í ÀÖ´Â ÀϹÝÀûÀÎ °³¹ßÀÚ°¡ ÀÏ»óÀûÀ¸·Î º¼ ¼ö ÀÖ´Â ¶Ç´Â ÇÊ¿ä·Î ÇÏ´Â °Íµé Áß¿¡¼ µðÀÚÀÎ ÆÐÅÏÀ¸·Î Á¤¸®µÇ¾î ÀÖ´Â °Í¡¯¿¡ ºÎÇÕµÈ´Ù°í »ý°¢µÇ´Â °ÍµéÀ» °ñ¶ó¼ ±× Àǹ̸¦ ÇϳªÇϳª ÆľÇÇØ °¡µµ·Ï ÇÒ ¿¹Á¤ÀÌ´Ù. ÀÌ·¸°Ô ÇÔÀ¸·Î½á ÀÌ ºÐ¾ßÀÇ °æÇèÀÌ ¸¹Àº µ¶ÀÚµéÀ̳ª ±×·¸Áö ¾ÊÀº µ¶ÀÚµéÀÌ ³ª¸§´ë·Î °´Ã¼ÁöÇâÀûÀÎ ½Ã½ºÅÛ µðÀÚÀο¡ ±íÀº ÅëÂû(?)À» ¾òÀ» ¼ö ÀÖÀ» °ÍÀ¸·Î ±â´ëÇÑ´Ù. ¿©±â¿£ ÇÊÀÚµµ Æ÷ÇԵȴÙ. ^(^ Áö³ È£¿¡´Â °´Ã¼ »ý¼º¿¡ ´ëÇÑ ÆÐÅÏ Áß¿¡ ±âº»ÀÌ µÇ´Â °ÍÀ¸·Î Factory Method[1]¿¡ ´ëÇÏ¿© ¾Ë¾Æº¸¾Ò´Ù. ÀÌ ÆÐÅÏÀ» ÀÌÇØÇÏ¸é ´Ù¸¥ °ü·Ã ÆÐÅϵ鵵 ±×¸® ¾î·ÆÁö ¾Ê°Ô ÀÌÇØÇÒ ¼ö ÀÖ´Ù´Â °ÍÀ» È®ÀÎ ÇÒ ¼ö ÀÖ¾úÀ» °ÍÀÌ´Ù(°ü·Ã ÆÐÅÏÀ¸·Î Á¦°¡ ¿°ÅÇÑ °ÍµéÀ» ÀÐ¾î º¸¼Ì³ª¿ä? ^(^). ÀÌ ¹øÈ£¿¡´Â GoF Ã¥¿¡ ¼Ò°³µÇ¾î ÀÖ´Â °´Ã¼ »ý¼º°ú °ü·ÃµÈ ÆÐÅϵé°ú´Â Á» ´õ ´Ù¸¥ ½Ã°¢¿¡¼ °´Ã¼¸¦ »ý¼ºÇÏ´Â ¹æ¹ý¿¡ ´ëÇÑ ÆÐÅÏÀ» ¾Ë¾Æº¸°íÀÚ ÇÑ´Ù. ¾Æ¸¶ Èï¹Ì·Î¿ï °ÍÀÌ´Ù.
1. ÀϹÝÀûÀÎ °´Ã¼ »ý¼º °úÁ¤ »ìÆ캸±â °´Ã¼ÁöÇâ Æз¯´ÙÀÓÀÇ Æ¯Â¡À» Áö¿øÇÏ´Â ´ëÁßÀûÀÎ ÇÁ·Î±×·¡¹Ö ¾ð¾î¸¦ °¡Áö°í °´Ã¼¸¦ »ý¼ºÇÏ´Â °æ¿ì¸¦ »ý°¢ÇØ º¸ÀÚ. ÀÌ µé ¾ð¾î´Â Ŭ·¡½º ±â¹ÝÀÇ ÇÁ·Î±×·¡¹Ö ¾ð¾îµé·Î¼ ÀϹÝÀûÀ¸·Î µÎ °úÁ¤À» °ÅÃļ °´Ã¼°¡ »ý¼ºµÇ°Ô µÈ´Ù. ¸ÕÀú, °´Ã¼ÀÇ Å¸ÀÔ(Type)ÀÌ µÇ´Â Ŭ·¡½º(class)¸¦ Á¤ÀÇÇÑ´Ù. ±×·± ÈÄ¿¡´Â ÀÌ Å¬·¡½º¸¦ °¡Áö°í ÇØ´ç ŸÀÔÀÇ ÀνºÅϽº(instance)ÀÎ °´Ã¼(object)¸¦ »ý¼ºÇÏ´Â °úÁ¤À» °ÅÄ£´Ù. ¼Ò½º Äڵ带 º¸¸é ´ÙÀ½°ú °°Àº ¸ð½ÀÀ» º¸ÀÏ °ÍÀÌ´Ù. class Oonews { ¡¦ } public class MainClass { ¼Ò½º 1. ÀϹÝÀûÀÎ °´Ã¼ »ý¼º °úÁ¤
À§ÀÇ ¼Ò½º¸¦ º¸¸é Oonews¶ó´Â Ŭ·¡½º¸¦ Á¤ÀÇÇÏ°í, ÀÌ·¸°Ô Á¤ÀÇµÈ Å¬·¡½ºÀÇ Å¸ÀÔÀ» °¡Áö´Â °´Ã¼¸¦ new¶ó´Â ¿¹¾à¾î(keyword)¸¦ ÀÌ¿ëÇÏ¿© ¸í½ÃµÈ ŸÀÔÀÇ °´Ã¼¸¦ »ý¼ºÇÏ°Ô µÈ´Ù. À§ÀÇ °úÁ¤À» Á» ´õ ±¸Ã¼ÀûÀ¸·Î »ìÆ캸ÀÚ. ÇÁ·Î±×·¡¸Ó´Â ¼Ò½º 1°ú °°ÀÌ ÇÁ·Î±×·¥À» ¸¸µç ÈÄ¿¡ ÄÄÆÄÀÏ(compile) °úÁ¤À» °ÅÄ£´Ù. ÄÄÆÄÀÏ °úÁ¤À» °ÅÄ£ ÄÚµå´Â ÀϹÝÀûÀ¸·Î ½ÇÇà ÄÚµåÀ̸ç ÀÌ Äڵ带 ½ÇÇà½ÃÅ°¸é ½ÇÇà Áß¿¡ ÇÁ·Î±×·¡¸Ó°¡ ¿øÇÏ´Â °´Ã¼°¡ »ý¼ºÀÌ µÈ´Ù. Áï, ÀϹÝÀûÀ¸·Î Ŭ·¡½º ±â¹ÝÀÇ °´Ã¼ÁöÇâ ÇÁ·Î±×·¡¹Ö ¾ð¾î¿¡¼´Â °´Ã¼ÀÇ Å¸ÀÔÀÌ µÇ´Â Ŭ·¡½º¸¦ ·±Å¸ÀÓ(runtime)ÀÌ ¾Æ´Ï¶ó ÄÄÆÄÀÏŸÀÓ(compile time)¿¡ °áÁ¤ÀÌ µÈ´Ù. µû¶ó¼, ÇØ´ç °´Ã¼ÀÇ Å¸ÀÔÀ» ¹Ù²Ù¾î¾ß ÇÒ Çʿ伺ÀÌ ÀÖÀ» °æ¿ì¿¡´Â ÇØ´ç Ŭ·¡½ºÀÇ ¼Ò½º¸¦ °íÄ¡°í ÄÄÆÄÀÏ °úÁ¤À» ´Ù½Ã °ÅÄ¡°Ô µÈ´Ù. Ŭ·¡½º ±â¹ÝÀÇ ÀϹÝÀûÀÎ °´Ã¼ÁöÇâ
¾ð¾î¿¡¼´Â ŸÀÔÀ» °íÄ¡±â À§Çؼ ÄÄÆÄÀÏ °úÁ¤À» ´Ù½Ã °ÅÄ¡´Â °ÍÀÌ ÀϹÝÀûÀ¦ ½ÇÇà Áß¿¡ »õ·Î¿î ŸÀÔÀ» »ý¼ºÇÒ ¼ö ÀÖ´Ù¸é ¾î¶³±î?
TypeObject ÆÐÅÏÀº ¹Ù·Î ±×·± Àǹ®À» Ç®¾îÁÙ ¼ö ÀÖ´Â ÆÐÅÏÀÌ´Ù[2]. ÀÌ ÆÐÅÏÀº
PLoP¡¯96ÄÁÆÛ·±½º(conference)¿¡ ¹ßÇ¥µÈ °ÍÀ¸·Î GoF Ã¥ÀÇ ÀúÀÚ Áß¿¡ ÇÑ »ç¶÷ÀÎ Ralph Johnson°ú Bobby
Woolf¿¡ ÀÇÇؼ ¾²¿©Á³´Ù(PLoP'96ÀÇ °æ¿ì¿¡´Â ÀÎÅÍ³Ý »óÀ¸·Î ProceedingÀ» °ø°³ÇÏ°í ÀÖÁö ¾Ê´Ù. TypeObject
ÆÐÅÏ¿¡ ´ëÇÑ ³í¹® ¿øº»Àº Âü°í¹®Çå 2¹ø¿¡ ³ª¿Í ÀÖ´Ù). ÀÌ·± ¹æ¹ýÀº ÄÄÆÄÀÏ °úÁ¤À» °ÅÄ¡¾ß ÇÏ´Â ¹æ¹ý°ú ºñ±³Çؼ Àå´ÜÁ¡ÀÌ ºÐ¸íÀÌ ÀÖ´Ù.
¿ì¼± ±×·± Á¡À» ³íÇϱâ Àü¿¡ ¾î¶»°Ô ÇÏ¸é ±×·¸°Ô ÇÒ ¼ö ÀÖ´ÂÁö TypeObject ÆÐÅÏÀ» ÅëÇؼ ¾Ë¾Æº¸ÀÚ. Èï¹Ì·ÓÁö ¾ÊÀº°¡?
2. ½ÇÇà Áß¿¡ ŸÀÔÀ» »ý¼ºÇÏÀÚ - TypeObject ÆÐÅÏ ÀÏ´Ü ±Ã±ÝÇÏ´Ï±î ¿ì¼± ±× ±¸Á¶ºÎÅÍ º¸ÀÚ.
TypeObject ÆÐÅÏÀº ±×¸² 1°ú °°´Ù.
±×¸² 1. TypeObject ÆÐÅÏ ÀÌ ÆÐÅÏ ±¸Á¶¸¦ º¸°í´Â ¿¡°Ô~~ ÇÏ´Â
µ¶ÀÚµµ ÀÖÀ» °ÍÀÌ´Ù. ±¸Á¶´Â °£´ÜÇÏÁö¸¸ ÀÌ ÆÐÅÏÀº ½ÇÇà Áß¿¡ ŸÀÔÀ» »ý¼ºÇÒ ¼ö ÀÖ°Ô ÇØ ÁØ´Ù. ÀÌÁ¦ ÀÌ ¹øÈ£ÀÇ º»°ÝÀûÀÎ À̾߱⸦
½ÃÀÛÇØ º¸°Ú´Ù. 2.1 ½Ã³ª¸®¿À TypeObject ÆÐÅÏÀÌ À¯¿ëÇÏ°Ô »ç¿ëµÉ ¼ö ÀÖ´Â »óȲ¿¡´Â ¾î¶² °æ¿ì°¡ ÀÖÀ»±î? ¿©±â¼´Â ÀÌ ÆÐÅÏÀÇ ÀúÀÚµéÀÌ ¼³¸íÇϴµ¥ ÀÌ¿ëÇß´ø ºñµð¿À °¡°ÔÀÇ °æ¿ì¸¦ ±×´ë·Î »ç¿ëÇϵµ·Ï ÇÏ°Ú´Ù. ºñµð¿À °¡°Ô¿¡¼ ºñµð¿À Å×ÀÌÇÁ °ü¸®¸¦ ½±°Ô °ü¸®ÇÒ ¼ö ÀÖ´Â ½Ã½ºÅÛÀ» ¸¸µé¾î ´Þ¶ó´Â ÀÇ·Ú¸¦ ¹Þ¾Ò´Ù°í °¡Á¤ÇØ º¸ÀÚ. ÀÚ.. ÀÌÁ¦ ¾î¶»°Ô ÇÏ¿©¾ß Çϴ°¡? ÀÌ ½Ã½ºÅÛÀ» µðÀÚÀÎ ÇÏ´Â µ¥´Â ºñµð¿À °¡°ÔÀÇ ¡®ºñµð¿À Å×ÀÌÇÁ¡¯¸¦ ³ªÅ¸³»±â À§ÇÏ¿© VideotapeÀ̶ó´Â Ŭ·¡½º¸¦ ÇÊ¿ä·Î ÇÒ °ÍÀÌ´Ù. ±×·¸´Ù¸é ºñµð¿À °¡°Ô¿¡¼ Ãë±ÞÇÏ°í ÀÖ´Â ¸ðµç ºñµð¿À Å×ÀÌÇÁ¸¦ ³ªÅ¸³»´Â Ŭ·¡½º¸¦ ¸¸µé °ÍÀΰ¡? ÀÌ·± ½ÄÀ¸·Î´Â ¹®Á¦°¡ È¿À²ÀûÀ¸·Î ÇØ°áµÇÁö ¾Ê´Â ´Ù´Â °ÍÀ» °æÇè ÀÖ´Â µ¶ÀÚµéÀº ±Ý¹æ ¾Ë¾ÆÂ÷·ÈÀ» °ÍÀÌ´Ù. ±×·³ ÀÌ·¸°Ô ÇßÀ» °æ¿ìÀÇ ¹®Á¦Á¡ÀÌ ¹«¾úÀΰ¡? »ý°¢Çغ¸¸é ´ÙÀ½°ú °°ÀÌ µÎ °¡ÁöÀÇ Ä¿´Ù¶õ ´ÜÁ¡ÀÌ ÀÖÀ» ¼ö ÀÖÀ» °ÍÀÌ´Ù. ù ¹ø°·Î´Â ÇÑ ºñµð¿À °¡°Ô¿¡¼ Ãë±ÞÇÏ´Â ºñµð¿Àµé »çÀÌ¿¡´Â °øÅëÁ¡ÀÌ ¸¹ÀÌ ÀÖ¾î¼, ÄÄÇ»ÅÍ ÀÚ¿ø ³¶ºñ¸¦ ÃÊ·¡ÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î °°Àº À̸§ÀÇ ¿µÈ¸¦ ´ã°í ÀÖ´Â ºñµð¿À Å×ÀÌÇÁµéÀº ¡®¿µÈÀ̸§¡¯, ¡®¿µÈµî±Þ¡¯, ¡®´ë¿©·á¡¯ µî¿¡ °üÇÑ µ¥ÀÌÅÍ´Â ¶È°°°í, ÇØ´ç ºñµð¿À Å×ÀÌÇÁÀÇ ¡®´ë¿©ÀÚ¡¯, ¡®´ë¿©ÀÏÀÚ¡¯ µî¿¡¸¸ Â÷À̸¦ º¸ÀδÙ. ¶Ç ´Ù¸¥ ¹®Á¦Á¡À¸·Î´Â »õ·Î¿î ºñµð¿À Å×ÀÌÇÁ°¡ µé¾î¿ÔÀ» °æ¿ì¿¡´Â ÇØ´ç ºñµð¿À Å×ÀÌÇÁ¿¡ ´ëÇÑ Å¬·¡½º¸¦ ¸¸µé¾î¼ ´Ù½Ã ÄÄÆÄÀÏÀ» ÇØ ÁÖ¾î¾ß ÇÏ´Â ¹®Á¦°¡ ÀÖ´Ù. ±×·³ À§¿Í °°Àº ¹®Á¦Á¡À» ÇØ°áÇϱâ À§Çؼ´Â ¾î¶»°Ô ÇØ¾ß ÇÒ±î? À§¿¡¼ ¹®Á¦°¡ µÇ¾ú´ø °°Àº ¿µÈ¸¦ ´ã°í ÀÖ´Â ºñµð¿À Å×ÀÌÇÁ »çÀÌÀÇ °øÅëÁ¡À» ÇØ°áÇϱâ À§ÇÑ ¹æ¾ÈÀ¸·Î ¡®»ó¼Ó(inheritance)¡¯À» ½±°Ô »ý°¢ÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ±×·³ °´Ã¼ÁöÇâ Æз¯´ÙÀÓÀÇ ÇÑ °¡Áö Ä¿´Ù¶õ Ư¡ÀÎ ¡®»ó¼Ó¡¯À» ÀÌ¿ëÇϱâ À§Çؼ, ¿ì¼± ¸ðµç ºñµð¿À Å×ÀÌÇÁ°¡ °¡Áö°í ÀÖ´Â ¼Ó¼ºÀ» °¡Áö´Â VideotapeÀ̶ó´Â Ŭ·¡½º¸¦ ¸¸µé°í ÀÌ Å¬·¡½º¸¦ »ó¼ÓÇÏ´Â °¢ ¿µÈ¿¡ ÇØ´çÇϴ Ŭ·¡½º¸¦ ¸¸µç´Ù. ¿¹¸¦ µé¾î, ¡®½¬¸®¡¯¿Í ¡®¹ÝÄ¢¿Õ¡¯¿¡ ´ëÇÑ ºñµð¿À Å×ÀÌÇÁÀÇ °æ¿ì, VideotapeÀ» »ó¼ÓÇÏ´Â SwiriVTape, FoulkingVTapeÀ̶ó´Â Ŭ·¡½º¸¦ ¸¸µé¾î¼ »ç¿ëÇÏ´Â °ÍÀÌ´Ù. ÀÌ·¸°Ô ÇÔÀ¸·Î½á óÀ½¿¡ ¹®Á¦°¡ µÇ¾ú´ø °°Àº µ¥ÀÌÅ͸¦ Áߺ¹ÇÏ¿© »ç¿ëÇÏ´Â ÄÄÇ»ÅÍ ÀÚ¿ø ³¶ºñ¸¦ ¾î´À Á¤µµ ÁÙÀÏ ¼ö ÀÖ´Ù. ±×·¯³ª, ¿©ÀüÈ÷ µÎ ¹ø° ¹®Á¦´Â ÇØ°áÇÒ ¼ö ¾ø´Â ¹æ¾ÈÀÌ´Ù. ±× ÀÌÀ¯´Â »õ·Î¿î ¿µÈÀÇ ºñµð¿À Å×ÀÌÇÁ°¡ µé¾î¿À¸é ÇØ´ç ¿µÈ¿¡ ´ëÇÑ ±âÁ¸¿¡ Ŭ·¡½º°¡ ¾ø±â ¶§¹®¿¡ »õ·Î¿î Ŭ·¡½º¸¦ ¸¸µé¾î ÄÄÆÄÀÏÀ» ´Ù½Ã ÇØ ÁÖ¾î¾ß Çϱ⠶§¹®ÀÌ´Ù. ¹®Á¦¸¦ ÇØ°áÇϱâÀ§ÇÑ ¹æ¾ÈÀ¸·Î »ý°¢Çغ» À§ÀÇ µÎ
°¡Áö ¹æ¾ÈÀÌ ÀÌ °æ¿ì¿¡ È¿À²ÀûÀ¸·Î ¸ÔÇô µéÁö ¾Ê´Â ÀÌÀ¯´Â ¹«¾ùÀΰ¡? ±× °ÍÀº ÀÌ ¹®Á¦¿¡´Â ½ÇÇà Áß¿¡ µ¿ÀûÀ¸·Î º¯ÇÏ´Â ºÎºÐÀÌ Àִµ¥,
À§¿¡¼ »ý°¢ÇÑ µÎ °¡Áö ¹æ¾È¿¡´Â ÀÌ¿¡ ´ëÇÑ Ã³¸® ºÎºÐÀÌ ¾ø±â ¶§¹®ÀÌ´Ù. ´Ù½Ã ¸»Çؼ, Çö½ÇÀûÀ¸·Î »õ·Î¿î ¿µÈ°¡ Áö¼ÓÀûÀ¸·Î ³ª¿À°í
Àִµ¥, ÄÚµå´Â ÀÌ ¹®Á¦¸¦ ÄÄÆÄÀÏ ½Ã°£¿¡ ¸ðµÎ ÇØ°áÇÏ·Á´Â ½Ã°¢À¸·Î Á¢±ÙÇÏ°í Àֱ⠶§¹®ÀÌ´Ù. (ÀÌ °ÍÀ» ¿µ¾î½Ä Ç¥ÇöÀ¸·Î´Â
hardcode ÇÑ´Ù°í ±×·¯´øµ¥..) ±×·³ µ¿ÀûÀ¸·Î ÀÌ·± ¹®Á¦¸¦ ÇØ°áÇϱâ À§Çؼ´Â ¾î¶² ½ÄÀ¸·Î ½Ã½ºÅÒÀ» µðÀÚÀÎ ÇØ¾ß ÇÒ±î?
TypeObject ÆÐÅÏÀÌ ¹Ù·Î ÀÌ·± ¹®Á¦¿¡ ÇØ°áÃ¥À» Á¦½ÃÇÏ°í ÀÖ´Ù. 2.2 ÀνºÅϽº¸¦ ±×µéÀÇ Å¬·¡½º·ÎºÎÅÍ Çعæ½ÃÅ°ÀÚ !! À§¿¡¼ Á¦½ÃµÈ µÎ °¡Áö µðÀÚÀÎÀÇ ¹®Á¦Á¡Àº µ¿ÀûÀ¸·Î º¯Çϴ ŸÀÔ¿¡ ´ëÇÑ Ã³¸®¸¦ ÇÒ ¼ö ¾ø´Ù´Â °ÍÀ̾ú´Ù. ÀÌ ¹®Á¦´Â ±×¸² 1ÀÇ TypeObject±¸Á¶¸¦ ÃëÇÏ¸é ½±°Ô ÇØ°áµÈ´Ù. ±×·³ ŸÀÔÀÌ ·±Å¸ÀÓ ½Ã¿¡ ¾î¶»°Ô ¹Ù²ð ¼ö ÀÖ´ÂÁö ºñµð¿À Å×ÀÌÇÁ ¹®Á¦·Î ´Ù½Ã µ¹¾Æ°¡¼ »ý°¢ÇØ º¸ÀÚ. À§ÀÇ ºñµð¿À Å×ÀÌÇÁ¿¡ ´ëÇÑ À̾߱⿡¼ ¾Ë ¼ö
ÀÖ¾ú°ÚÁö¸¸, °á±¹ ºñµð¿À Å×ÀÌÇÁÀÇ Å¸ÀÔ ¼Ó¼ºÀ¸·Î º¼ ¼ö ÀÖ´Â °ÍÀº ±× ºñµð¿À Å×ÀÌÇÁ°¡ ´ã°í ÀÖ´Â ¿µÈÀÇ Á¦¸ñ°ú ±× ºñµð¿À Å×ÀÌÇÁÀÇ
´ë¿©·á Á¤µµ·Î º¼ ¼ö ÀÖ°í, ³ª¸ÓÁö ¼Ó¼º, Áï, ´ë¿©ÀÚ, ´ë¿© ¿©ºÎ, ´ë¿©ÀÏ µîÀº ƯÁ¤ ŸÀÔÀÇ ÀνºÅϽº·Î º¼ ¼ö ÀÖ´Ù. µû¶ó¼, ±×¸²
2¿Í °°ÀÌ ÀÌ ½Ã½ºÅÛÀ» µðÀÚÀÎ ÇÏ¸é µ¿ÀûÀ¸·Î º¯Çϴ ŸÀÔÀÇ ¹®Á¦¸¦ ÇØ°áÇÒ ¼ö ÀÖ´Ù. ±×¸² 2ÀÇ Å¬·¡½º ´ÙÀ̾î±×·¥À» º¸¸é,
Movie¶ó´Â Ŭ·¡½º¿Í VideotapeÀ̶ó´Â µÎ °³ÀÇ Å¬·¡½º·Î ÀÌ·ç¾îÁ® ÀÖ´Ù. Movie Ŭ·¡½º´Â ¿øÇÏ´Â ºñµð¿À Å×ÀÌÇÁÀÇ Å¸ÀÔÀ»
³ªÅ¸³» Ŭ·¡½º°í, VideotapeÀº Movie Ŭ·¡½º¿¡ ÀÇÇÑ Å¸ÀÔ¿¡ ´ëÇÑ ÀνºÅϽº¸¦ »ý¼ºÇϴ Ŭ·¡½º´Ù.
±×¸² 2. TypeObject ÆÐÅÏÀ» ÀÌ¿ëÇÑ ºñµð¿À Å×ÀÌÇÁ 󸮸¦ À§ÇÑ µðÀÚÀÎ À̸¦ Á»´õ ±¸Ã¼ÀûÀ¸·Î ¼³¸íÇÏ¿© º¸°Ú´Ù. À§¿Í °°Àº
µðÀÚÀÎÀ¸·Î °´Ã¼¸¦ »ý¼ºÇÏ¸é ±×¸² 3°ú °°ÀÌ µÈ´Ù. ¸ÕÀú ¡®½¬¸®¡¯¶ó´Â »õ·Î¿î ¿µÈÀÇ ºñµð¿À Å×ÀÌÇÁ°¡ °¡°Ô¿¡ µµÂøÇß´Ù°í Çϸé, ÀÌ¿¡ ´ëÇÑ
ŸÀÔÀ» ¸¸µç´Ù. ÀÌÁ¦´Â »õ·Î¿î Ŭ·¡½º¸¦ ¸¸µé¾î ÇÁ·Î±×·¥À» ´Ù½Ã ÄÄÆÄÀÏ ÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó, ±×¸² 2ÀÇ Movie Ŭ·¡½º·ÎºÎÅÍ
titleÀº swiri·Î ´ë¿©·á´Â 1500¿øÀÎ ¼Ó¼ºÀ» °¡Áö´Â aMovie0001À̶ó´Â °´Ã¼¸¦ µ¿ÀûÀ¸·Î »ý¼ºÇÑ´Ù. ±×·± ´ÙÀ½¿¡´Â °¡°Ô¿¡
µé¾î¿Â ½¬¸® ºñµð¿À Å×ÀÌÇÁÀÇ °³¼ö ¸¸ÅÀÇ Videotape °´Ã¼¸¦ »ý¼ºÇϴµ¥, ÀÌ µé °´Ã¼´Â ¸ðµÎ ½¬¸® ŸÀÔÀÇ °´Ã¼¸¦ °¡¸®Å°´Â
aMovie0001¶ó´Â type ¼Ó¼ºÀ» °¡Áø´Ù. ±×¸² 3Àº ÀÌ·¸°Ô »ý¼ºµÈ ºñµð¿À Å×ÀÌÇÁ °´Ã¼°¡ µÎ °³ ÀÖ°í, °¢°¢ ¡®À̽ÂÀÏ¡¯°ú
¡®À̹αԡ¯¿¡°Ô ´ëÃâµÇ¾î ÀÖ´Â »óŸ¦ ³ªÅ¸³»°í ÀÖ´Ù. ±×¸² 3. ±×¸² 2ÀÇ µðÀÚÀÎÀ» ÀÌ¿ëÇÑ °´Ã¼ »ý¼ºÀÇ ¿¹ Àß ÀÌÇØ°¡ µÇ¾ú´ÂÁö ¸ð¸£°ÚÁö¸¸, TypeObject ÆÐÅÏÀº ŸÀÔÀ» »ý¼ºÇϴ Ŭ·¡½º¿Í ÀνºÅϽº¸¦ »ý¼ºÇϴ Ŭ·¡½º°¡ µû·Îµû·Î ÀÖµµ·Ï µÇ¾î ÀÖ´Ù. µû¶ó¼, ·±Å¸ÀÓ Áß¿¡ ÇÊ¿äÇÑ Å¸ÀÔÀ» »ý¼ºÇÒ ¼ö ÀÖÀ¸¸ç, »ý¼ºµÈ ŸÀÔÀÇ ÀνºÅϽº´Â ÀνºÅϽº¸¦ »ý¼ºÇϴ Ŭ·¡½º¿¡ ÀÇÇØ »ý¼ºµÇ¾î Àڽſ¡°Ô ÀûÀýÇÑ Å¸ÀÔ °´Ã¼ÀÇ Æ÷ÀÎÅ͸¦ °¡ÁüÀ¸·Î½á ÀÚ½ÅÀÇ Å¸ÀÔÀ» µ¿ÀûÀ¸·Î ³ªÅ¸³¾ ¼ö ÀÖ°Ô µÈ´Ù. À§¿¡¼ ¿¹·Î µç ºñµð¿À Å×ÀÌÇÁÀÇ °æ¿ì¿¡ »õ·Î¿î ¿µÈÀÇ ºñµð¿À°¡ µé¾î¿À¸é ŸÀÔ Å¬·¡½ºÀÎ Movie Ŭ·¡½º¸¦ ÀÌ¿ëÇÏ¿© »õ·Î¿î ŸÀÔÀÇ ¿µÈ¸¦ »ý¼ºÇÏ°í, ÀÌ¿¡ ´ëÇÑ ºñµð¿À Å×ÀÌÇÁÀÇ °³¼ö¸¸ÅÀÇ ÀνºÅϽº´Â ÀνºÅϽº¸¦ »ý¼ºÇϴ Ŭ·¡½ºÀÎ Videotape Ŭ·¡½º¸¦ ÅëÇÏ¿© »ý¼ºµÈ ÈÄ¿¡ ÀÚ½ÅÀÇ Å¸ÀÔ ÀνºÅϽº¸¦ °¡¸®Å°´Â Æ÷ÀÎÅ͸¦ ¼Ó¼ºÀ¸·Î °®´Â´Ù. °á°úÀûÀ¸·Î TypeObject ÆÐÅÏÀ» ÀÌ¿ëÇϸé À§¿¡¼ ¹®Á¦°¡ µÇ¾ú´ø ÄÄÇ»ÅÍ ÀÚ¿øÀÇ ³¶ºñ ¹®Á¦, µ¿ÀûÀ¸·Î ŸÀÔÀ» »ý¼ºÇÏÁö ¸øÇß´ø ¹®Á¦¸¦ ¸ðµÎ ÇØ°áÇÒ ¼ö ÀÖ´Â µðÀÚÀÎ ÇعýÀ¸·Î º¼ ¼ö ÀÖ´Ù. ÀÌ ±ÛÀÇ Ã³À½¿¡ Èï¹Ì·Î¿ï °ÍÀ̶ó°í ±×·¨´Âµ¥, ÀÌ ±ÛÀ» ÀÐÀº µ¶ÀÚ°¡ ¾î¶»°Ô ´À²¼´ÂÁö ±Ã±ÝÇÏ´Ù. »ç½Ç TypeObject ÆÐÅÏÀº µ¿ÀûÀ¸·Î °´Ã¼ÀÇ Å¸ÀÔÀ» °áÁ¤ÇÒ ¼ö ÀÖ°Ô ÇÏ´Â ÈûÀ» °¡Áö°í ÀÖÁö¸¸, ±×¸¸Å ±¸ÇöÇÒ °æ¿ì¿¡ ½Å°æ ½á¾ß ÇÒ °ÍÀÌ ¸¹´Ù. ¿Ö³ÄÇϸé, ÀϹÝÀûÀ¸·Î ÇÁ·Î±×·¡¹Ö ¾ð¾î¿¡¼ ÇØ ÁÖ¾î¾ß ÇÒ Å¸ÀÔ¿¡ ´ëÇÑ °áÁ¤À» ÇÁ·Î±×·¡¸Ó°¡ Á÷Á¢ ÇØ ÁÖ¾î¾ß Çϱ⠶§¹®ÀÌ´Ù. ÇÏÁö¸¸, ÀÌ ÆÐÅÏÀ» ÀûÀýÇÑ °÷¿¡ Àß È°¿ëÇÏ¸é ±â´ë ÀÌ»óÀÇ ÁÁÀº ½Ã½ºÅÛÀ» ¸¸µé ¼öµµ ÀÖ´Ù´Â »ý°¢À» ÇÑ´Ù.
2.3 µ¿Àû ŸÀÔ º¯°æ - ±× ÀÌ»ó... »ç½Ç ÀÌ ÆÐÅÏÀº ¿ì¸®¿¡°Ô ¸¹Àº °ÍÀ» À̾߱âÇØ ÁÖ°í
ÀÖ´Ù. ±×¸² 1¿¡ ³ªÅ¸³ª ÀÖ´Â °ÍÀº ±×³É µÎ °³ÀÇ Å¬·¡½º·Î º¸ÀÏ ¼öµµ ÀÖ´Ù. ÇÏÁö¸¸ Áö±Ý±îÁö º¸¾ÒµíÀÌ ÀÌ ´Ü¼øÇÑ Å¬·¡½º µÎ °³¸¦
°¡Áö°í µ¿ÀûÀ¸·Î ŸÀÔÀ» º¯°æÇÒ ¼ö ÀÖ´Â ÀÏÀ» ÇØ ³½ °ÍÀÌ´Ù. Âü ³î¶øÁö ¾ÊÀº°¡? »ç½Ç ÀÌ ÆÐÅÏ¿¡ ´ëÇؼ ÇÒ
À̾߱Ⱑ ¸¹ÀÌ ³²¾ÒÁö¸¸, ¿©±â¼ ÁÙÀ̱â·Î ÇÏ°í ÀÌ ÆÐÅÏÀÇ ÀúÀÚµéÀÌ ¹àÈ÷°í ÀÖ´Â ÀÌ ÆÐÅÏÀÇ Àǵµ(intent), ÇÙ½É(keys)¸¦
Á¤¸®ÇÏ´Â °ÍÀ¸·Î ¸¶¹«¸®¸¦ ÁöÀ»·Á°í ÇÑ´Ù. °ü½ÉÀÌ ÀÖ´Â µ¶ÀÚµéÀº Âü°í¹®Çå[2]ÀÇ Ã¥À» »ç¼ ÀÚ¼¼È÷ ÀÐ¾î º¸±â ¹Ù¶õ´Ù. ÇÊÀÚ°¡
°ÅÁþ¸»À» ÇÏ°í ÀÖÀ»Áöµµ ¸ð¸£´Ï±î. ^(^
2.4 °ü·Ã ÆÐÅÏ ÀÌ ÆÐÅÏÀÇ ÀúÀÚµéÀº °ü·Ã ÆÐÅÏÀ¸·Î Strategy[1], State[1], Reflective Architecture[3], Bridge[1], Decorator[1], Flyweight[1], Prototype[1] À» ¿°ÅÇߴµ¥, ¿©±â¼ °¢ ÆÐÅϵé°ú ÀÌ ¹øÈ£¿¡¼ ¼Ò°³ÇÑ TypeObject ÆÐÅÏ°ú ¾î¶² ¸é¿¡¼ °ü·ÃÀÌ ÀÖ´ÂÁö¸¦ À̾߱âÇÏ´Â °Í¸¸À¸·Îµµ ¿©·¯ È£¿¡ °ÉÃļ À̾߱⠰Ÿ®°¡ µÉ °Í °°´Ù. ±×·¡¼, Áö±Ý »ý°¢Àº ÀÌ Áß¿¡ Àç¹ÌÀÖ´Â °ÍÀ» Çϳª °ñ¶ó¼ ´ÙÀ½ È£¿¡ ¾ÈÁְŸ®·Î »ïÀ¸¸é ¾î¶³±î »ý°¢ÇØ º»´Ù. ÀÌ ¹øÈ£¿¡ º» TypeObject ÆÐÅÏÀÇ ´Ù¸¥ ¸éµµ º¼°âÇؼ....
3. ¸ÎÀ½¸» ¿ì¸®°¡ ÁÁÀº ½Ã½ºÅÛÀ» µðÀÚÀÎ Çϱâ À§Çؼ´Â ¾î¶»°Ô ÇØ¾ß ÇÒ±î? ±×³É À¯¸íÇÑ ÀÛ°¡°¡ ¾´ C++³ª Java ÇÁ·Î±×·¡¹Ö¾ð¾î Ã¥¸¸À» ¹«½ÄÇÏ°Ô 100µ¶ÇÏ¸é ±× ¹«¾ð°¡°¡ ±úÃÄÁú±î? ¾Æ´Ï¸é ±×³É ¾Æ¹« ÇÁ·Î±×·¥À̳ª ¸· ¸¸µé¾î º¸´Â °ÍÀϱî? ±×·¯´Ù º¸¸é ²Ç¼ö°¡ ´Ã¾î¼ ÈḢÇÑ ½Ã½ºÅÛÀ» µðÀÚÀÎÇÏ°í ±¸ÇöÇÒ ¼ö ÀÖÀ»±î? ¾Æ´Ï¸é ÈǸ¢ÇÑ °³¹ßµµ±¸¸¦ ¸¶·ÃÇؼ »ç¿ë¹ý¿¡ ¾ÆÁÖ Àͼ÷ÇØÁ® ¹ö¸®´Â °ÍÀϱî? ¹°·Ð ¾î´À Á¤µµ´Â °¡´ÉÇÒ °ÍÀÌ´Ù. ±×·¯³ª, ÀÌ·± ¹æ¹ýÀ¸·Î´Â ÇÁ·Î±×·¡¹ÖÀûÀÎ ´É·ÂÀº Çâ»ó½Ãų ¼ö ÀÖÀ»Áö ¸ô¶óµµ ½Ã½ºÅÛ µðÀÚÀÎ ´É·Â¿¡´Â ¸¹Àº ÇÑ°è°¡ ÀÖÀ» °ÍÀÌ´Ù. °³ÀÎÀûÀ¸·Î´Â ½Ã½ºÅÛ µðÀÚÀο¡´Â ÇÁ·Î±×·¡¹Ö ´É·Â ±× ÀÌ»óÀÌ ÇÊ¿äÇÏ´Ù°í »ý°¢ÇÏ°í ÀÖ´Ù. ÇÊÀÚ°¡ °³ÀÎÀûÀ¸·Î ÆÐÅÏÀ» º¸°í ³î¶ú´ø °ÍÀº ¿©±â¼ ¼³¸íµÈ ÀÌ·± Á¾·ùÀÇ °£´ÜÇÑ Å¬·¡½º µÎ °³°¡ ¼ÒÇÁÆ®¿þ¾îÀûÀÎ ÄÄÇ»ÅÍ ½Ã½ºÅÛÀÇ ¼º´É¿¡ Ä¿´Ù¶õ ¿µÇ×À» Å°Ä¥ ¼ö ÀÖ´Ù´Â °ÍÀ» ´À²¼±â ¶§¹®À̾ú´Ù. ÀÌ ±ÛÀ» Àд µ¶ÀÚ´Â ¾î¶»°Ô »ý°¢ Çϴ°¡?
Âü°í ¹®Çå [1] Erich Gamma, Richard
Helm, Ralph Johnson, John Vlissides,
[2] Pattern languages of
Program Design 3, edited by Robert Martin,
[3] F.Buschmann, R.
Meunier, H. Rohnert, P. Sommerlad, and M. Stal,
(±Û Èıâ ) ÇÊÀÚÀÇ ½Ç¼ö »ç½Ç ÀÌ ±ÛÀ» ¾²°í ÀÖ´Â ÀÌÀ¯´Â ÇÊÀÚ°¡ ÀϹæÀûÀ¸·Î
¸¹Àº »ç¶÷À» ´ë»óÀ¸·Î ÆÐÅÏ¿¡ ´ëÇÑ ±³¸®(?)¸¦ ÀüÆÄÇÏ¿© ¾î¶² ¹«¾ùÀ» ¾òÀ¸·Á´Â °ÍÀÌ ¾Æ´Ï¶ó, °°Àº °ü½É»ç¸¦ °¡Áö´Â »ç¶÷µé »çÀÌ¿¡¼
¼·ÎÀÇ »ý°¢À» ³ª´©°í ÀÚ½ÅÀÇ »ý°¢À» ´ÙµëÀ¸·Á´Â Àǵµ°¡ Å®´Ï´Ù. ÀÌ·± °üÁ¡¿¡¼ ÇÊÀÚ°¡ Áö³ ´Þ¿¡´Â Ä¿´Ù¶õ ½Ç¼ö Çϳª¸¦ Çß½À´Ï´Ù. Áö³
È£ÀÇ ÇÊÀÚÀÇ ±ÛÀ» Àаí ÀÌ¿¡ ´ëÇÑ Åä·ÐÀ» À¯¹ßÇÏ´Â ±ÛÀ» ¹é¿µ¿ì¾¾°¡ ¡®¹¯°í ´äÇϱ⡯¶õ¿¡ ¿Ã·Á Á̴ּµ¥ ÇÊÀÚ´Â ÀÌ¿¡ ´ëÇØ ¹«½¼ ±³ÁÖÀξç
ŵµ¸¦ º¸ÀÌ´Â ´äÀ» ¾²°í ¸»¾Ò´ø °ÍÀÔ´Ï´Ù. óÀ½¿¡´Â ¾Æ¹« »ý°¢ÀÌ ¾ø¾ú´Âµ¥ ½Ã°£ÀÌ Áö³ Áö±Ý¿¡ ¿Í¼¾ß Âü ¹Ùº¸ °°Àº ÁþÀ» Çß´Ù´Â °ÍÀ»
±ú´Þ¾ÒÁÒ. ¹é¿µ¿ì¾¾¸¦ Æ÷ÇÔÇؼ ÀÌ ±ÛÀ» ÀÐÀ¸½Ã´Â ºÐµé¿¡°Ô Âü Á˼۽º·´´Ù´Â ¸»À» µå¸³´Ï´Ù. ¾ÕÀ¸·Î´Â ÀÚÀ¯·Î¿î Åä·ÐÀÌ ÀÌ·ç¾îÁú ¼ö ÀÖµµ·Ï
ÁÖÀǸ¦ ±â¿ïÀÌ°Ú½À´Ï´Ù. ±×¸®°í, ÇöÀç´Â Àú È¥ÀÚ¸¸ ÆÐÅÏ¿¡ ´ëÇÑ Åä·Ð ÁÖÁ¦(ÀúÀÇ ±Û)¸¦ ¸Å´Þ ¶ç¿ì°í Àִµ¥.. Ȥ½Ã ÆÐÅÏ¿¡
´ëÇؼ ±ÛÀ» ½á ÁÖ½Ç ´Ù¸¥ ºÐ ¾È °è¼¼¿ä? ±×·³ ÆÐÅÏ¿¡ ´ëÇÑ ³»¿ëµµ ´õ dz¼ºÇØÁö°í, ÀÌ¿¡ µû¶ó¼ ÆÐÅÏ¿¡ °ü½ÉÀ» °¡Áö°í ÀÖ´Â ¿ì¸®µéÀÇ
»ý°¢µµ ´õ ´Ùµë¾îÁú ¼ö ÀÖÀ» °Å¶õ »ý°¢ÀÌ µå´Âµ¥.. ^(^ UML¿¡ ´ëÇÑ Á¤¸®¸¦ ÷ºÎÇÏÁö ¾ÊÀº ÀÌÀ¯.. ÇöÀç °´Ã¼ÁöÇâ ´º½º·¹ÅÍ¿¡´Â Çöó½ºÆ½ ¼ÒÇÁÆ®¿þ¾îÀÇ
½É¿øµµ¾¾°¡ UML¿¡ ´ëÇؼ ±ÛÀ» ½áÁÖ½Ã°í °è½Ê´Ï´Ù. °³ÀÎÀûÀ¸·Î ÆÐÅÏ¿¡ »ç¿ëµÇ´Â ¼öÁØÀÇ UMLÀ» Á¤¸®ÇÏ°í ÀÖ¾ú´Âµ¥, ½É¿øµµ¾¾ÀÇ ±Û°ú
Áߺ¹µÈ´Ù´Â »ý°¢¿¡ Á¦°¡ Á¤¸®ÇÑ °ÍÀº ¿©±â¿¡ Æ÷ÇÔ½ÃÅ°Áö ¾Ê±â·Î °áÁ¤À» ³»·È½À´Ï´Ù. UML¿¡ ´ëÇÑ ±¸Ã¼ÀûÀÎ ³»¿ëÀº ½É¿øµµ¾¾ÀÇ
±Û°ú http://www.uml.co.kr/ »çÀÌÆ®¸¦ Âü°íÇϽøé
ÃæºÐÇϸ®¶ó »ý°¢ÇÏ°í ÀÖ½À´Ï´Ù. ¼Ò½º ÄÚµå »ç¿ë ±ÔÄ¢ Á¦°¡ ¾²°í ÀÖ´Â ±Û¿¡¼ »ç¿ëÇÏ´Â Java ¾ð¾î¿¡ ´ëÇÑ ¼Ò½º ÄÚµå »ç¿ë ±ÔÄ¢¿¡ ´ëÇÑ ¹®¼¸¦ °´Ã¼ÁöÇâ ´º½º·¹ÅÍÀÇ 1È£ ±Û ÈĹݺο¡ ÷°¡ ½ÃÄÑ ³õ¾Ò½À´Ï´Ù. |
oonewsletter - 2000/3/31 |