µðÀÚÀÎ ÆÐÅÏ(4) - º¹Á¦ ¾ç µ¹¸®(Dolly) ?
À̽ÂÀÏ
|
´º½º·¹ÅÍ 3È£¿¡¼´Â µ¿ÀûÀ¸·Î ŸÀÔÀ» ¹Ù²Ù´Â °ÍÀ» °¡´ÉÇÏ°Ô ÇØ ÁÖ´Â TypeObject ÆÐÅÏ[1]¿¡ ´ëÇؼ À̾߱⸦ Çß´Ù. ¿µÈ ¡®Terminator 3¡¯¸¦ º¸¸é ÀÚ½ÅÀÇ ¸ð½ÀÀ» ¸¶À½´ë·Î ¹Ù²Ü ¼ö ÀÖ´Â ÀÎÁ¶Àΰ£ÀÌ ³ª¿Â´Ù. ÀÚ½ÅÀÇ ¸ð½ÀÀ» ¸¶À½´ë·Î ¹Ù²Ü ¼ö ÀÖ´Ù´Â Á¡¿¡¼ ÀÌ ¿µÈÀÇ ÀÎÁ¶Àΰ£ÀÌ TypeObject¿Í ºñ½ÁÇÏ´Ù°í À̾߱âÇÏ¸é ³Ê¹« Áö³ªÄ£ ºñ¾àÀϱî? ^(^ ÀÌ ¹øÈ£¿¡´Â TypeObject ÆÐÅÏÀÇ ÀúÀÚµéÀÌ °ü·Ã ÆÐÅÏÀ¸·Î ¿°ÅÇÑ °Íµé Áß¿¡¼ Prototype ÆÐÅÏ[2]¿¡ ´ëÇؼ À̾߱⸦ ÇØ º¸·Á°í ÇÑ´Ù. TypeObject ÆÐÅÏÀÌ ÀÚ½ÅÀÇ ¸ð½ÀÀ» ¸¶À½´ë·Î ¹Ù²Ü ¼ö ÀÖ´Â °ÍÀ̶ó¸é, ÀÌ ¹øÈ£¿¡ À̾߱â ÇÏ·Á´Â Prototype ÆÐÅÏÀº ¶Ç ´Ù¸¥ ÀÚ½ÅÀ» º¹Á¦(clone)ÇÒ ¼ö ÀÖ´Â ÆÐÅÏÀÌ´Ù.
1. »ç°íÀÇ Æ²À» ±úÀÚ!! °´Ã¼¸¦ ¸¸µé±â À§Çؼ´Â ¹«¾ùÀÌ ÇÊ¿äÇÑ°¡? ±×·¸´Ù. ÀÌ ¹øÈ£¿¡¼µµ ¶Ç °´Ã¼ »ý¼º¿¡ ´ëÇÑ À̾߱⸦ ÇÏ·Á°í ÇÑ´Ù. ÇÏÁö¸¸ ±âÁ¸ÀÇ ³Î¸® ¾Ë·ÁÁ® ÀÖ´Â ¹æ¹ý°ú´Â ±Ùº»ÀûÀÎ ºÎºÐ¿¡¼ Â÷À̸¦ °¡Áö°í ÀÖ´Â ¹æ¹ýÀÌ´Ù. °´Ã¼ÁöÇâ ÇÁ·Î±×·¡¹Ö ¾ð¾î·Î ÇöÀç °¡Àå ´ëÁßÀûÀÎ ¾ð¾î¸¦ µé¶ó¸é, C++¿Í Java¾ð¾î¸¦ µé ¼ö ÀÖÀ» °ÍÀÌ´Ù. Áö³ È£¿¡¼µµ ¾Ë¾Æ º¸¾ÒÁö¸¸, ÀÌ µÎ ¾ð¾î¿¡¼´Â °´Ã¼¸¦ »ý¼ºÇϱâ À§Çؼ´Â Ŭ·¡½º(Class)¸¦ ¸ÕÀú ¸¸µé°í instantiationÀ̶ó ºÒ¸®´Â °úÁ¤À» ÅëÇؼ ÇØ´ç Ŭ·¡½º ŸÀÔÀÇ °´Ã¼¸¦ »ý¼ºÇÏ°Ô µÈ´Ù. ±×·³ Ŭ·¡½º¶ó°í ºÒ¸®´Â °ÍÀÌ ¾øÀ¸¸é °´Ã¼ÁöÇâ ¾ð¾î¿¡¼´Â °´Ã¼¸¦ »ý¼ºÇÒ ¼ö ¾ø´Ù´Â °ÍÀΰ¡? ±×·¸Áö ¾Ê´Ù. Ŭ·¡½º°¡ ¾øÀ̵µ ¾ó¸¶µçÁö °´Ã¼¸¦ ¸¸µé ¼ö ÀÖ´Â ¹æ¹ýÀÌ ÀÖ´Ù. C++¿Í Javaó·³ Ŭ·¡½º¸¦ ±â¹ÝÀ¸·Î °´Ã¼¸¦ »ý¼ºÇÏ´Â ÇÁ·Î±×·¡¹Ö ¾ð¾î¸¦ ¡®Å¬·¡½º ±â¹Ý ¾ð¾î(class-based language)¶ó°í ÇÏ°í Ŭ·¡½º°¡ ¾øÀÌ ÀÓÀÇÀÇ °´Ã¼¸¦ ±â¹ÝÀ¸·Î ¶Ç ´Ù¸¥ °´Ã¼¸¦ »ý¼ºÇÏ´Â ¾ð¾î¸¦ ¡®ÇÁ·ÎÅäŸÀÔ ±â¹ÝÀÇ ¾ð¾î(prototype-based language)¡¯¶ó°í ÇÏ¿© ±¸ºÐÇÏ°í ÀÖ´Ù.
2. ÇÁ·ÎÅäŸÀÔ ±â¹Ý ¾ð¾î ±×·³ Ŭ·¡½º ¾øÀÌ °´Ã¼¸¦ ¾î¶»°Ô »ý¼ºÇÑ´Ù´Â ¸»Àΰ¡? ±× À̾߱⸦ Çϱâ Àü¿¡ ±Ùº»ÀûÀ¸·Î °´Ã¼¸¦ »ý¼ºÇÑ´Ù´Â °ÍÀÌ ¹«¾ùÀ» ÀǹÌÇÏ´ÂÁö °õ°õÀÌ »ý°¢ÇØ º¸ÀÚ. Ŭ·¡½º¸¦ °¡Áö°í °´Ã¼¸¦ »ý¼ºÇÒ ¶§ÀÇ ±â¾ïÀ» ¶°¿Ã¸®¸é¼¡¦. ÇϳªÀÇ °´Ã¼¶õ ÀϹÝÀûÀ¸·Î ÀÚ½ÅÀÇ »óÅÂ(state) Á¤º¸¸¦ ÀúÀåÇϱâ À§Çؼ ÇÊ¿ä·Î ÇÏ´Â µ¥ÀÌÅÍ ±¸Á¶(data structure)¿Í ÀÚ½ÅÀÇ »óÅ º¯°æ°ú °ü·ÃµÈ Çϳª ÀÌ»óÀÇ operationÀ» °¡Áø´Ù. °´Ã¼¸¶´Ù °¡Áö°í ÀÖ´Â »óÅ Á¤º¸ ÀúÀåÀ» À§ÇÑ µ¥ÀÌÅÍ ±¸Á¶¿Í operation µîÀÌ ¼·Î ´Ù¸¦ ¼öµµ ÀÖ°í, °æ¿ì¿¡ µû¶ó¼´Â °°Àº µ¥ÀÌÅÍ ±¸Á¶¿Í operationÀ» °¡Áö°í »óÅ Á¤º¸¿¡¸¸ Â÷À̸¦ °¡Áö°í ÀÖ´Â °´Ã¼µéµµ ÀÖÀ» °ÍÀÌ´Ù. ÈÄÀÚÀÇ °´Ã¼µéÀ» °°Àº ŸÀÔÀÇ °´Ã¼¶ó°í ºÎ¸£ÀÚ. Ŭ·¡½º ±â¹ÝÀÇ ¾ð¾î¿¡¼´Â °°Àº ŸÀÔÀÇ °´Ã¼µéÀ» ¹«ÇÑÈ÷ Âï¾î ³¾ ¼ö Àִ Ŭ·¡½º¶ó´Â À̸§ÀÇ °ÅǪÁýÀ» ¸¸µé¾î¼ °´Ã¼¸¦ »ý¼ºÇÏ´Â °ÍÀ¸·Î º¼ ¼ö ÀÖ´Ù. Áï, ¿ì¸®´Â C++¿Í Java ¾ð¾î¸¦ »ç¿ëÇؼ ÇÁ·Î±×·¥À» ¸¸µé ¶§ ÇÊ¿äÇÑ °ÅǪÁýÀ» ¸Å¹ø ¸¸µé°í ÀÖ´Â °ÍÀÌ´Ù. ¿©±â¼ ÁÖÀÇ ±í°Ô º¸¾Æ¾ß ÇÒ ºÎºÐÀº »ý¼ºÇÏ·Á°í ÇÏ´Â °´Ã¼ÀÇ Å¸ÀÔ¿¡ ´ëÇÑ Á¤º¸¸¦ Ŭ·¡½º°¡ °¡Áö°í ÀÖ°í, µû¶ó¼, ¿ì¸®°¡ Ŭ·¡½º¸¦ ¸¸µç´Ù´Â °ÍÀº ÇØ´ç ÄÄÆÄÀÏ·¯¿¡°Ô »ý¼º ÇÏ·Á´Â °´Ã¼ÀÇ Á¤º¸¸¦ ÁÖ°í ÀÖ´Â °úÁ¤À¸·Î »ý°¢ÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ±×·³ ÀÌÁ¦ ´Ù½Ã Ŭ·¡½º°¡ ¾ø´Â »óÅ·Πµ¹¾Æ°¡¼ À̾߱⸦ ÇØ º¸ÀÚ. Ŭ·¡½º°¡ ¾ø´Ù´Â °ÍÀº »ý¼ºÇÏ·Á°í ÇÏ´Â °´Ã¼ÀÇ Å¸ÀÔ¿¡ ´ëÇÑ Á¤º¸¸¦ ´Ù¸¥ ¾î¶² °ÍÀ¸·ÎºÎÅÍ ÇØ´ç ÄÄÆÄÀÏ·¯¿¡°Ô ÀÏ·¯ ÁÖ¾î¾ß ÇÑ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. ±×·¸Áö ¾ÊÀ¸¸é, ¾î¶»°Ô ÄÄÆÄÀÏ·¯°¡ ¿ì¸®ÀÇ Àǵµ¸¦ ¾Ë¾ÆÂ÷¸®°í ¿ì¸®°¡ ¿øÇÏ´Â °´Ã¼¸¦ »ý¼ºÇØ ÁÙ ¼ö ÀÖ´Ù´Â ¸»Àΰ¡? µðÀÚÀÎ ÆÐÅÏÀÇ Ã¹ ¹ø° ±Û¿¡¼µµ À̾߱â ÇßÁö¸¸, °øÂ¥´Â ¾ø´Ù(There¡¯s no magic!!). ±×·³ »ý¼º °´Ã¼ÀÇ Å¸ÀÔ Á¤º¸¸¦ ÁÙ ¼ö ÀÖ´Â ´Ù¸¥ ¹æ¹ýÀ¸·Î´Â ¾î¶² °ÍÀÌ ÀÖÀ»±î? ½±°Ô »ý°¢ ÇÒ ¼ö ÀÖ´Â °ÍÀº ÀÌ¹Ì »ý¼ºµÇ¾î ÀÖ´Â ´Ù¸¥ °´Ã¼¸¦ ÇÁ·ÎÅäŸÀÔ(prototype)À¸·Î Çؼ ±× °´Ã¼ÀÇ Å¸ÀÔ Á¤º¸¸¦ ÁÖ´Â ¹æ¹ýÀ» »ý°¢ÇØ º¼ ¼ö ÀÖ´Ù. ´Ù½Ã ¸»Çؼ, ÇÁ·ÎÅäŸÀÔ ±â¹ÝÀÇ ¾ð¾î´Â °´Ã¼ »ý¼ºÀ» À§Çؼ Ŭ·¡½º°¡ ¾Æ´Ñ °´Ã¼¸¦ ŸÀÔÀ¸·Î Çؼ ´Ù¸¥ °´Ã¼¸¦ »ý¼ºÇÏ´Â °úÁ¤À» °ÅÄ£´Ù. ±×·³ ±¸Ã¼ÀûÀ¸·Î ¾î¶»°Ô ´Ù¸¥ °´Ã¼¸¦ ÇÁ·ÎÅäŸÀÔÀ¸·Î Çؼ ´Ù¸¥ °´Ã¼¸¦ »ý¼ºÇϴ°¡? ¾ö¹ÐÈ÷ ±× °úÁ¤Àº »õ·Î¿î °´Ã¼°¡ »ý¼ºµÇ±â º¸´Ù´Â »ý¹°ÀÇ ¼¼Æ÷°¡ ºÐ¿ÇÒ ¶§Ã³·³ ÀڽŰú ¶È °°Àº ¶Ç´Â ÀϺΠ±â´ÉÀ» °¡Áö´Â °´Ã¼¸¦ ¸Þ¸ð¸®¿¡ º¹Á¦ÇÏ´Â °úÁ¤À¸·Î º¼ ¼ö ÀÖ°í, ÀϹÝÀûÀ¸·Î´Â ÀÌ °úÁ¤À» Ç¥ÇöÇϱâ À§Çؼ ¡®clone¡¯À̶ó´Â ¿ë¾î¸¦ »ç¿ëÇÑ´Ù. Ŭ·¡½º ¾øÀÌ °´Ã¼¸¦ »ý¼ºÇÏ´Â °Í¿¡ ´ëÇؼ ÀüüÀûÀ¸·Î´Â ¾î¶² °úÁ¤À» °ÅÄ¡´ÂÁö ÀÌÇØÇÒ ¼ö ÀÖ¾úÀ» °ÍÀÌ´Ù. ±×·³ ÀÌÁ¦ ±¸Ã¼ÀûÀ¸·Î
cloneÀ̶ó´Â °úÁ¤ÀÌ ¾î¶»°Ô ±¸ÇöµÉ ¼ö ÀÖ°í ÀÌ °ÍÀÌ ¾î¶»°Ô ±¸Ã¼ÀûÀÎ ÇϳªÀÇ ÆÐÅÏÀ¸·Î ³ªÅ¸³¯ ¼ö ÀÖ´ÂÁö¿¡ ´ëÇؼ À̾߱⸦ ÇØ
º¸°Ú´Ù.
3. ¹® Á¦ °£´ÜÇÑ µå·ÎÀ×(drawing) ÇÁ·Î±×·¥À» ¸¸µç´Ù°í °¡Á¤ÇØ º¸ÀÚ. ÀÌ ÇÁ·Î±×·¥ÀÇ ¿ä±¸»çÇ× Áß¿¡ ¹Ýµå½Ã ±¸ÇöµÇ¾î¾ß ÇÒ °ÍÀº »ç¿ëÀÚ°¡ ¸¶¿ì½º Ŭ¸¯¸¸À¸·Î ¿ø, »ç°¢Çü µî°ú °°Àº ±×¸²À» ±×¸± ¼ö ÀÖ¾î¾ß ÇÑ´Ù´Â °ÍÀ̶ó°í ÇÑ´Ù. ÀÌ·± ¿ä±¸»çÇ×À» ¸¸Á·½ÃÅ°±â À§Çؼ ¿ø, »ç°¢Çü µî°ú °°Àº ÇÁ·ÎÅäŸÀÔÀÇ ±×¸²ÀÌ ±×·ÁÁ® ÀÖ´Â ÆÈ·¡Æ®(palette)¸¦ ±¸¼ºÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù[±×¸² 1].
±×¸² 1. µå·ÎÀ× ÇÁ·Î±×·¥ÀÇ ÆÈ·¡Æ® ±×¸² 1°ú °°Àº ÆÈ·¡Æ®°¡ ¸¶·ÃµÇ¸é, »ç¿ëÀÚ´Â ÀÚ½ÅÀÌ ±×¸®·Á°í ÇÏ´Â µµÇüÀÇ Ç¥º»ÀÌ µÇ´Â ÇÁ·ÎÅäŸÀÔÀ» ÆÈ·¡Æ® À§¿¡¼ ã¾Æ ¸¶¿ì½º Ŭ¸¯¸¸À¸·Î ½±°Ô ±×¸² ±×¸®±â¸¦ ½ÃÀÛÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ±×·³ ÀÌ·± ÆÈ·¡Æ®¸¦ ±¸ÇöÇϱâ À§Çؼ´Â ¾î¶»°Ô ÇØ¾ß ÇÒ±î? ÆÈ·¡Æ® À§¿¡ ³õ¿©ÀÖ´Â ¡®¿ø¡¯À» Ŭ¸¯Çؼ µµÈÁö(±×¸²ÀÌ ±×·ÁÁö´Â ºÎºÐÀ» µµÈÁö¶ó°í À̸§ ºÙ¿© º¸¾Ò´Ù.)À§¿¡ ³õ¾Ò´Ù´Â °ÍÀº ¹«¾ùÀ» ÀǹÌÇϴ°¡? ÀÌ °ÍÀº ÇϳªÀÇ ¡®¿ø¡¯ °´Ã¼°¡ »ý¼ºµÇ¾ú´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. ±×·³ ÀÌÁ¦ ¹®Á¦´Â °´Ã¼ »ý¼º ¹æ¹ý Áß¿¡¼ °¡Àå È¿À²ÀûÀÎ ¹æ¹ýÀ» ã¾Æ¼ ÀÌ °úÁ¤À» ±¸ÇöÇÏ´Â ÀÏÀÌ ³²¾Ò´Ù. ¿ì¸®°¡ ¾Ë°í ÀÖ´Â °´Ã¼ »ý¼º ¹æ¹ýÀ» Âß ¿°ÅÇϸé¼, °¡Àå È¿À²ÀûÀ¸·Î º¸ÀÌ´Â °ÍÀ» ¼±ÅÃÇØ º¸ÀÚ. ¸ÕÀú, ÇØ´ç Ŭ·¡½º·ÎºÎÅÍ
Á÷Á¢ÀûÀ¸·Î °´Ã¼¸¦ »ý¼ºÇÏ´Â ¹æ¹ýÀº ¾î¶³±î? ÀÌ ¹æ¹ýÀº ÀÌ ÀüÀÇ ´º½º·¹ÅÍ¿¡¼ À̾߱â ÇßµíÀÌ ÇØ´ç ŸÀÔ¿¡ ´ëÇÑ Á¤º¸¸¦ ¸ðµÎ °¡Áö°í ÀÖ¾î¾ß
ÇÏ´Â ¹®Á¦ ¶§¹®¿¡ ÀÌ¿ëÇÏ´Â °´Ã¼¿ÍÀÇ ÀÇÁ¸¼ºÀÌ ³Ê¹« Å©´Ù. ÀÌ ¿¹¿¡¼ Àû¿ëÇØ º»´Ù¸é, ¸¶¿ì½º°¡ Ŭ¸¯µÉ ¶§ÀÇ À̺¥Æ® Çڵ鷯°¡ ÆÈ·¡Æ®¿¡
µî·ÏµÇ¾î ÀÖ´Â ¸ðµç °´Ã¼ÀÇ Å¬·¡½º ŸÀÔ¿¡ ´ëÇÑ Á¤º¸¸¦ °¡Áö°í ÀÖ¾î¾ß Çϱ⠶§¹®¿¡, ÇÁ·ÎÅäŸÀÔ °´Ã¼ÀÇ Å¬·¡½º¿¡ ´ëÇÑ ¼öÁ¤ÀÌ °¡ÇØÁö¸é
À̺¥Æ® Çڵ鷯ÀÇ ¼Ò½º Äڵ忡¼µµ ¼öÁ¤ÀÌ °¡ÇØÁ®¾ß ÇÑ´Ù. ±×·³, Abstract Factory ÆÐÅÏ[2]À» ÀÌ¿ëÇÏ¸é ¾î¶³±î? (2È£¿¡¼
Factory Method¿¡ ´ëÇÑ ¼³¸íÀ» ÇÏ°í Abstract Factory ÆÐÅÏ¿¡ ´ëÇÑ °øºÎ´Â µ¶ÀÚÀÇ ¸ò¿¡ ¸Ã°å¾ú´Âµ¥, ÀÌ ±ÛÀ»
Àаí ÀÖ´Â µ¶ÀÚ°¡ Abstract Factory ÆÐÅÏ¿¡ ´ëÇÑ Áö½ÄÀÌ ÀÖ´ÂÁö ¸ð¸£°Ú´Ù. ¿¡¶ó ¸ð¸£°Ú´Ù. ^(^ ) ÀÌ ÆÐÅÏÀ» ÀÌ¿ëÇϸé
ÇÁ·ÎÅäŸÀÔ °´Ã¼ÀÇ Å¬·¡½º¿Í À̺¥Æ® Çڵ鷯¿ÍÀÇ »çÀÌ¿¡ °´Ã¼ »ý¼º¿¡ ´ëÇÑ ÀÇÁ¸¼ºÀ» °ÅÀÇ Á¦°ÅÇÒ ¼ö Àֱ⠶§¹®¿¡ ÁÁÀº ¹æ¹ýÀÌ µÉ ¼ö ÀÖÀ»
°ÍÀÌ´Ù. 3È£¿¡¼
À̾߱âÇÑ TypeObject ÆÐÅÏÀº ¾î¶³±î? ·±Å¸ÀÓ ½Ã¿¡ ÆÈ·¡Æ®¿¡ ÀÖ´Â °´Ã¼°¡ µµÈÁö¿¡ »ý¼ºµÉ °´Ã¼ÀÇ Å¸ÀÔ ¿ªÇÒÀ» ÇÑ´Ù´Â Á¡¿¡¼´Â
TypeObject ÆÐÅÏÀÇ ÀúÀÚµéÀÌ ÁöÀûÇßµíÀÌ ºñ½ÁÇÑ »óȲÀÌ´Ù[1]. ±×·¯³ª, ±¸Çö¿¡´Â ¾ÆÁÖ ½É°¢ÇÑ ¹®Á¦°¡ »ý±ä´Ù. ¿Ö³ÄÇÏ¸é ±×
±¸ÇöÀÌ ¾ÆÁÖ º¹ÀâÇØÁö±â ¶§¹®ÀÌ´Ù. µû¶ó¼, ÇöÀç±îÁö ¿ì¸®°¡ À̾߱âÇÑ °´Ã¼ »ý¼º¿¡ ´ëÇÑ ÆÐÅÏ Áß¿¡¼´Â Factory Method ÀÇ
È®ÀåÇüÀÎ Abstract Factory ÆÐÅÏÀÌ °¡Àå À¯·ÂÇÏ´Ù. ±×·¯³ª, ¿ì¸®°¡ óÀ½¿¡ À̾߱â ÇÑ´ë·Î Ŭ·¡½º¿¡ ´ëÇÑ Á¤º¸ ¾øÀÌ °´Ã¼¸¦
»ý¼ºÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀ¸·Î ÀÌ ¹®Á¦¸¦ ÇØ°áÇÏ¿© º¸°í Abstract Factory ÆÐÅÏ°ú ºñ±³ÇØ º¸¶ó. ¾Æ¸¶ Èï¹Ì·Î¿ï °ÍÀÌ´Ù.
4. °´Ã¼ º¹Á¦ ? µ¹¸®¸¦ ÇâÇÑ °´Ã¼ÀÇ ²Þ ÇÁ·ÎÅäŸÀÔ ÆÐÅÏÀÌ »ç¿ëµÇ±â À§ÇÑ ÀüÀç Á¶°ÇÀÌ ÀÖ´Ù. ±× °ÍÀº ÇÁ·ÎÅäŸÀÔÀ¸·Î »ç¿ëµÇ´Â °´Ã¼°¡ ÀÚ½ÅÀ» º¹Á¦ÇÒ ¼ö ÀÖ¾î¾ß ÇÑ´Ù´Â °ÍÀÌ´Ù. µû¶ó¼, ¿ì¼± °´Ã¼ÀÇ º¹Á¦¹®Á¦¿¡ ´ëÇؼ ¾Ë¾Æº¸ÀÚ. °´Ã¼ º¹Á¦°¡ ¹¹ ¾î·Á¿î°¡? ÇÏ´Â µ¶ÀÚµµ ÀÖÀ» °ÍÀÌ´Ù. ±×·¯³ª, ±×¸® °£´ÜÈ÷ »ý°¢ÇÒ ¼ö ÀÖ´Â ¹®Á¦´Â ¾Æ´Ï´Ù. ±× ÀÌÀ¯´Â °´Ã¼¶ó´Â °Í ÀÚü°¡ ÀÚ½ÅÀÇ »óÅ Á¤º¸¸¦ À§ÇÑ ¿©·¯ ŸÀÔÀÇ µ¥ÀÌÅÍ ±¸Á¶¸¦ Æ÷ÇÔÇÏ°í Àִٴµ¥ ÀÖ´Ù. °´Ã¼ º¹Á¦´Â µÎ °¡Áö ÇüÅ°¡ ÀÖ´Ù. ¡®Shallow copy¡¯¿Í ¡®Deep copy¡¯¶ó°í ºÒ¸®´Â °ÍÀÌ´Ù[3].
(°¡) shallow copy (³ª) deep copy ±×¸² 2. °´Ã¼ º¹Á¦ ¹æ¹ý ±×¸² 2¿¡ ³ªÅ¸³ °Íó·³ ¡®³ª¡¯¶ó´Â °´Ã¼¿Í ÀÌ °´Ã¼¿¡¼ ÁÖ¼Ò¿¡ ´ëÇÑ Á¤º¸¸¦ Ç¥ÇöÇϱâ À§Çؼ reference ÇÏ°í ÀÖ´Â ¡®ÁÖ¼Ò¡¯¶ó´Â °´Ã¼°¡ ÀÖ´Ù°í ÇÏÀÚ. ¡®³ª¡¯¶ó´Â °´Ã¼¸¦ º¹Á¦ÇßÀ» °æ¿ì¿¡ shallow copyÀÇ °æ¿ì¿¡´Â ¡®³ª¡¯ °´Ã¼°¡ Æ÷ÇÔÇÏ°í ÀÖ´Â º¯¼ö ¡®À̸§¡¯, ¡®°áÈ¥À¯¹«¡¯, ¡®ÁÖ¼Ò¡¯°¡ °¡Áö°í ÀÖ´Â µ¥ÀÌÅÍ¿¡ ´ëÇÑ ºÎºÐ¸¸À» º¹»çÇÑ´Ù. µû¶ó¼, ±×¸² 2ÀÇ (°¡)ÀÇ °æ¿ìó·³ ¡®³ª¡¯ °´Ã¼ÀÇ º¯¼ö ¡®ÁÖ¼Ò¡¯ÀÇ °æ¿ì¿¡´Â ¡®ÁÖ¼Ò¡¯ °´Ã¼¿¡ ´ëÇÑ reference°ª¸¸ º¹»çÇÏ¿© °á°úÀûÀ¸·Î´Â °°Àº ¡®ÁÖ¼Ò¡¯ °´Ã¼¸¦ referenceÇÏ°í ÀÖ´Ù. deep copyÀÇ °æ¿ì¿¡´Â ¡®³ª¡¯ °´Ã¼¿¡ Æ÷ÇԵǾî ÀÖ´Â º¯¼öÀÎ ¡®À̸§¡¯, ¡®°áÈ¥À¯¹«¡¯¿¡ ´ëÇÑ º¹»ç´Â ¹°·ÐÀÌ°í, ÀÌ °´Ã¼°¡ referenceÇÏ°í ÀÖ´Â ¸ðµç °´Ã¼¸¦ ±×´ë·Î º¹»çÇÏ°í ÇØ´ç reference °ªÀº ÀÌ¿¡ µû¶ó º¯°æµÈ °´Ã¼¿¡ ´ëÇÑ ÂüÁ¶ÀÚ(pointer)·Î º¯°æµÈ´Ù. µû¶ó¼, ³»ºÎÀûÀ¸·Î´Â ±×¸² 2ÀÇ (³ª)¿Í °°Àº °á°ú¸¦ °¡Á®¿À°Ô µÈ´Ù. ±×·¯¸é ´Ù½Ã ¿ì¸®ÀÇ ¿¹Á¦·Î µ¹¾Æ°¡¼ º¸ÀÚ. ¿ì¸®°¡ »ç¿ëÇÒ ÇÁ·ÎÅäŸÀÔ °´Ã¼µéÀº ÀÚ½ÅÀ» º¹Á¦ÇÒ ¶§ ¾î¶² º¹Á¦ ±â´ÉÀ» ºÎ¿©ÇØ ÁÖ¾î¾ß ÇÒ±î? shallow copy·Î ¾Æ´Ï¸é deep copy·Î? ¿ø°ú »ç°¢Çü Á¤µµ¸¦ ±×¸®´Âµ¥ ÇÊ¿äÇÑ °´Ã¼´Â ´Ù¸¥ °´Ã¼ÀÇ reference¸¦ °¡Áú ÇÊ¿ä°¡ ¾øÀ» °ÍÀÌ´Ù. µû¶ó¼, shallow copy Á¤µµ¸é ÃæºÐÇÒ °ÍÀÌ´Ù. ±×¸² 3. ÇÁ·ÎÅäŸÀÔ °´Ã¼ÀÇ Å¬·¡½º ´ÙÀ̾î±×·¥ ±×¸² 3ó·³ ÇÁ·ÎÅäŸÀÔ °´Ã¼·Î »ç¿ëÇÒ °¢ °´Ã¼°¡ ÀÚ½ÅÀ» º¹Á¦ÇÒ ¼ö ÀÖµµ·Ï ÇÏ´Â clone()À̶ó´Â ¸Þ¼Òµå¸¦ ¸¸µé¾î ³Ö¾î ÁØ´Ù. ÇÁ·ÎÅäŸÀÔ °´Ã¼¸¦ »ç¿ëÇÒ ´Ù¸¥ °´Ã¼µé°úÀÇ ÀÇÁ¸¼ºÀ» ³·Ãß±â À§Çؼ Shape¶ó´Â ÀÎÅÍÆäÀ̽º¸¦ ¸¸µé¾î ÁØ´Ù. ¼Ò½º Äڵ带 º¸¸é ´ÙÀ½°ú °°ÀÌ µÉ ¼ö ÀÖÀ» °ÍÀÌ´Ù. interface Shape { public Shape clone(); } class Circle implements Shape {
RectangleÀÇ °æ¿ìµµ CircleÀÇ °æ¿ì¿Í ºñ½ÁÇÑ ¼Ò½º Äڵ带 °¡Áú °ÍÀÌ´Ù. ÀÌÁ¦ ¿ì¸®°¡ »ç¿ëÇÒ °´Ã¼¿¡ º¹Á¦ ´É·ÂÀ» ºÎ¿©ÇØ
ÁÖ¾ú´Ù. ÀÌÁ¦ º¹Á¦ ´É·ÂÀ» °¡Áø ÇÁ·ÎÅäŸÀÔ °´Ã¼¸¦ °¡Áö°í ÆÈ·¡Æ®¸¦ ¸¸µé¾î º¸ÀÚ.
5. Prototype ÆÐÅÏ ÇÁ·ÎÅäŸÀÔ ÆÐÅÏÀÇ ±Ùº»Àº ¾Õ¿¡¼ À̾߱âÇÑ cloneÀ̶ó´Â °úÁ¤À» ÅëÇؼ ÇØ´ç °´Ã¼¿¡ ´ëÇÑ Á¤º¸°¡ °ÅÀÇ ¾øÀÌ °´Ã¼¸¦ »ý¼ºÇÒ ¼ö ÀÖ´Ù´Â µ¥ ÀÖ´Ù. ¾î¶»°Ô ±×·² ¼ö ÀÖ´ÂÁö À̾߱âÇØ º¸°Ú´Ù. ÇÁ·ÎÅäŸÀÔ ÆÐÅÏÀ» ÀÌ¿ëÇؼ ÇÁ·ÎÅäŸÀÔ °´Ã¼¸¦ »ý¼ºÇϱâ À§ÇÑ Å¬·¡½º ´ÙÀ̾î±×·¥Àº ±×¸² 4¿Í °°Àº ±¸Á¶°¡ µÉ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ±×¸² 4ÀÇ Å¬·¡½º ´ÙÀ̾î±×·¥¿¡¼ ¡®PrototypeBuilder Ŭ·¡½º´Â ÇÁ·ÎÅäŸÀÔ °´Ã¼¸¦ »ý¼ºÇÏ¿© ¡®Palette¡¯ °´Ã¼¿¡ µî·Ï½ÃÅ°´Â ÀÏÀ» ÇÑ´Ù. ±×¸®°í, Palette °´Ã¼´Â PrototypeBuilder°¡ »ý¼ºÇÏ¿© µî·Ï½ÃŲ ÇÁ·ÎÅäŸÀÔ °´Ã¼¸¦ º¸°üÇÏ°í ÀÖ´Ù°¡, ÆÈ·¡Æ®¸¦ »ç¿ëÇÏ´Â ´Ù¸¥ °´Ã¼°¡ ÇÁ·ÎÅäŸÀÔ °´Ã¼¸¦ ¿øÇÒ °æ¿ì¿¡, ÇØ´ç °´Ã¼ÀÇ Å¬·¡½º¸¦ ÀÌ¿ëÇÏ¿© ÇØ´ç °´Ã¼¸¦ »õ·Ó°Ô »ý¼ºÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó, ÇØ´ç °´Ã¼¸¦ cloning ÇÑ´Ù. Áï, ÀÚ½ÅÀÇ º¹Á¦ °´Ã¼¸¦ ÁØ´Ù.
±×¸² 4. ÆÈ·¡Æ®¸¦ À§ÇÑ Å¬·¡½º ´ÙÀ̾î±×·¥ PrototypeBuilder¿Í Palette Ŭ·¡½º´Â ´ÙÀ½°ú °°ÀÌ ±¸ÇöµÉ ¼ö ÀÖÀ» °ÍÀÌ´Ù. class PrototypeBuilder {
class Palette { À§ÀÇ ¼Ò½º¿¡¼ º¼ ¼ö ÀÖµíÀÌ Palette °´Ã¼´Â ¿ÜºÎÀÇ °´Ã¼°¡(¿©±âÀÇ ¿¹¿¡¼´Â ¸¶¿ì½º°¡ µµÈÁö À§¿¡ Ŭ¸¯ µÇ¾úÀ» ¶§ÀÇ À̺¥Æ® Çڵ鷯°¡) ÇÁ·ÎÅäŸÀÔ °´Ã¼¸¦ ¿øÇßÀ» °æ¿ì¿¡ ÇØ´ç °´Ã¼ÀÇ Å¬·¡½º¸¦ ÀÌ¿ëÇؼ »õ·Î¿î °´Ã¼¸¦ »ý¼ºÇÏ°í À̸¦ ¸®ÅÏÇÏ°í ÀÖÁö ¾Ê´Ù. ´ë½Å¿¡ °ü¸®ÇÏ°í ÀÖ´Â °´Ã¼ÀÇ clone()À̶ó´Â ¸Þ¼Òµå¸¦ È£ÃâÇÔÀ¸·Î½á ÇØ´ç °´Ã¼ÀÇ º¹»çº»À» ¸®ÅÏÇØ ÁÖ°í ÀÖ´Ù. ¿©±â¼ ¿ì¸®°¡ ´« ¿©°Ü ºÁ¾ß ÇÒ °÷Àº Palette °´Ã¼°¡ cloningÀ» ÅëÇؼ º¹Á¦¸¦ ÇÏ°í ÀÖ´Â °´Ã¼¿¡ ´ëÇÑ Å¸ÀÔ Á¤º¸¿¡ ´ëÇؼ ¾Æ´Â °ÍÀÌ ÀüÇô ¾ø´Ù´Â °ÍÀÌ´Ù. Àç¹ÌÀÖÁö ¾ÊÀº°¡? À§¿¡¼ ¿¹·Îµç ÀÚ¹Ù ¼Ò¼Ò¿¡ ´ëÇؼ ¸î ¸¶µð ÇÒ À̾߱Ⱑ ÀÖ´Ù. »ç½Ç ÀÚ¹Ù ¾ð¾î´Â Ŭ·¡½º ±â¹ÝÀÇ ¾ð¾îÀÌÁö¸¸ °´Ã¼ cloning¿¡ ´ëÇÑ °ÍÀ» ¾ð¾î Â÷¿ø¿¡¼ Á¦°øÇØ ÁÖ°í ÀÖ´Ù. ÀÚ¹Ù ¾ð¾îÀÇ ¸ðµç °´Ã¼´Â Object Ŭ·¡½º¸¦ »ó¼ÓÇÏ°í ÀÖÀ¸¸ç, ÀÌ ¼Ó¿¡´Â clone()À̶ó´Â ¸Þ¼Òµå°¡ Æ÷ÇԵǾî ÀÖ´Ù. ±×·¯³ª, ÀÌ ¸Þ¼Òµå´Â Ç×»ó »ç¿ëµÉ ¼ö ÀÖ´Â °ÍÀÌ ¾Æ´Ï¶ó, CloneableÀ̶ó´Â ÀÎÅÍÆäÀ̽º¸¦ implementÇϴ Ŭ·¡½ºÀÇ °´Ã¼¸¸ cloningÀ» Áö¿øÇØ ÁÖ°í ÀÖ´Ù. ÀÌ ¶§ÀÇ cloningÀº shallow copy°¡ µÈ´Ù. À§ÀÇ ¼Ò½º¸¦ ÀÚ¹ÙÀÇ clone() ¸Þ¼Òµå¸¦ ÀÌ¿ëÇؼ ±¸Çö ¿¹¸¦ º¸À̸é, ¾î´À Á¤µµ ±× ³»¸·À» ¾Ë±â ¾î·Æ´Ù´Â ÆÇ´Ü¿¡¼ ÀϺη¯ shallow copy¸¦ ±¸ÇöÇØ º» °ÍÀÌ´Ù. ÀÌÁ¦ À̾߱⸦ Á¤¸®ÇØ º¸ÀÚ. ±×¸² 5´Â GoF Ã¥¿¡ ÀÖ´Â Prototype ÆÐÅÏÀ» ÇÊÀÚ°¡ UML ¹öÀüÀ¸·Î ¹Ù²Û °ÍÀÌ´Ù. ±×¸² 5. Prototype ÆÐÅÏ ÀÌ ÆÐÅÏ¿¡¼ client Ŭ·¡½º´Â prototype °´Ã¼¸¦ ÀÌ¿ëÇÑ´Ù´Â Àǹ̿¡¼ client¶ó´Â À̸§ÀÌ ºÙ¿©Á³´Ù. µû¶ó¼, client¸¦ ±¸ÇöÇÒ ¶§ ¸¹ÀÌ ÀÌ¿ëÇÏ´Â ¹æ¹ýÀº ÇÊÀÚ°¡ ÀÌ °÷¿¡¼ ¿¹·Î µé¾ú´ø °Íó·³ palette·Î Ç¥ÇöµÈ prototype °´Ã¼¸¦ ÀúÀåÇϴ Ŭ·¡½º¿Í ÀÌ ÀúÀå Ŭ·¡½º¿¡ °´Ã¼¸¦ ³Ö´Â ±â´ÉÀ» °¡Áö´Â Ŭ·¡½º·Î ³ª´©¾î ±¸ÇöÇÏ´Â °ÍÀÌ´Ù. ±× ¿ÜÀÇ ³ª¸ÓÁö ºÎºÐÀº ÀÌ °÷ÀÇ ¿¹¿Í °°´Ù. ÀÌ ÆÐÅÏÀÇ ÀúÀÚµéÀÎ GoF µéÀÌ ÀÌ ÆÐÅÏ¿¡ ´ëÇؼ ¹àÈ÷°í ÀÖ´Â Àǵµ(intent)·Î Prototype ÆÐÅÏ¿¡ ´ëÇÑ À̾߱⸦
ÁÙÀÌ°Ú´Ù. Àǵµ(intent) Specify the kinds of objects to create using a prototypical instance, and create new objects by copying this prototype cloningÀÌ °¡´ÉÇÑ °´Ã¼(ÇÁ·ÎÅäŸÀÔ °´Ã¼)¸¦ º¹»ç ÇÔÀ¸·Î½á »õ·Î¿î °´Ã¼¸¦ »ý¼ºÇÑ´Ù.
6. °ü·Ã ÆÐÅÏ ÀÌ ÆÐÅÏ°ú °ü·ÃÀÌ ÀÖ´Ù°í ÀúÀÚµéÀÌ À̾߱âÇϱâ·Î´Â ÇÊÀÚ°¡ ³»¿ë Áß¿¡µµ ¾ð±ÞÇßµíÀÌ Abstract Factory ÆÐÅÏ[2]°ú °ÅÀÇ
´ëµîÇÏ°Ô »ó¿ëµÉ ¼ö ÀÖ°í, ±× ¿ÜÀÇ °ü·Ã ÆÐÅÏÀ¸·Î´Â Composite ÆÐÅÏ[2]°ú Decorator ÆÐÅÏ[2]À» ¸¹ÀÌ »ç¿ëÇÏ´Â
¼ÒÇÁÆ®¿þ¾î µðÀÚÀο¡¼ ÇÔ²² »ç¿ëµÇ¸é ¸¹Àº È¿°ú¸¦ º¼ ¼ö ÀÖ´Ù°í ÇÑ´Ù. Composite ÆÐÅÏ°ú Decorator ÆÐÅÏ¿¡ ´ëÇؼ´Â
³ªÁß¿¡ ±âȸ°¡ µÇ¸é »ìÆ캸±â·Î ÇÏÀÚ. 7. ¸ÎÀ½¸» ÀÌ ¹øÈ£¿¡´Â °´Ã¼ÀÇ Å¸ÀÔ Á¤º¸°¡ ¾øÀ̵µ °´Ã¼¸¦ »ý¼ºÇÒ ¼ö ÀÖ´Â Prototype ÆÐÅÏ¿¡ ´ëÇؼ ¾Ë¾Æ º¸¾Ò´Ù. ¿ª½Ã ¶Ç, °´Ã¼ »ý¼º¿¡ ´ëÇؼ À̾߱⸦ ÇØ º¸¾Ò´Ù. ȤÀÚ´Â °´Ã¼ »ý¼º¸¸ Çصµ Âü ÇÒ ¸»ÀÌ ¸¹±¸³ª ÇÏ°í ´À²¼À» Áöµµ ¸ð¸£°Ú´Ù. ±×¸¸Å °´Ã¼ »ý¼º¿¡ ´ëÇÑ ÀÌÇØ´Â °´Ã¼ÁöÇâ ÇÁ·Î±×·¡¹ÖÀÇ ±âº»ÀÌ µÈ´Ù°íµµ °¨È÷ ¸»ÇØ º¼ ¼ö ÀÖÀ» °Í °°´Ù. µµ¿òÀÌ µÇ¾ú´ÂÁö ¸ð¸£°Ú´Ù. ÀÌ ¹øÈ£ÀÇ ±ÛÀ» ÀÐÀ¸¸é¼, ¾î ¶² µ¶ÀÚ´Â °´Ã¼¸¸ »ý¼ºÇÏ¸é ¸ðµç °ÍÀÌ ³¡³ª´À³Ä? »ý¼ºµÈ °´Ã¼°¡ ÁÖ¾îÁø ÀÏÀ» ´Ù ³¡³»°í ³ª¼´Â ¾î¶²
ó¸® ¹æ¹ýÀÌ ÀÖ¾î¾ß ÇÏÁö ¾Ê´À³Ä? ÇÏ°í Àǹ®À» °¡Áú ¼öµµ ÀÖÀ» °ÍÀÌ´Ù. ÇÊÀÚµµ ±×·¸°Ô »ý°¢ÇÑ´Ù. ÄÄÇ»ÅÍÀÇ ÇÑÁ¤µÈ ÀÚ¿øÀ» »ý°¢ÇÑ´Ù¸é
¹«ÇÑÀÌ ÇÊ¿äÇÑ °´Ã¼¸¸ »ý¼ºÇÒ ¼ö´Â ¾ø´Ù. ³ªÁß µÞ󸮸¦ ¾î¶»°Ô ÇÒ °ÍÀΰ¡µµ ¾ÆÁÖ Áß¿äÇÑ »çÇ×ÀÌ´Ù. ´ÙÀ½ È£¿¡´Â object
destruction¿¡ ´ëÇÑ ºÎºÐ¿¡ ´ëÇؼ ¾ð±ÞÇÑ Object Lifecycle Pattern[4]¿¡ ´ëÇؼ À̾߱⸦ ÇØ º¸·Á ÇÑ´Ù.
±â´ëÇØ Áֱ⠹ٶõ´Ù. Âü°í ¹®Çå [1] Pattern languages of Program Design 3, edited by Robert Martin, Dirk Riehle, Frank Bschmann, Addison-Wesley, 1998 [2] Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, Design Patterns, Elements of Resuable Object-Oriented Software, Addison-Wesley, 1995 [3] Setrag Khoshafian, Razmik Abnous, Object Orientation, 2nd, John Wiley & Sons, Inc., 1995 [4] David L. Levine, Christopher D. Gill, Douglas C. Schmidt, Object
Lifecycle Manager A complementary Pattern for Controlling Object Creation
and Destruction, PLoP 1999 conference (±Û Èıâ ) 2000³â 4¿ùÀº pattern¿¡ ´ëÇÑ ±Û¸¸ ¾²´Ù°¡ ´Ù º¸³½ ´À³¦ÀÌ´Ù. pattern¿¡ Áö´ëÇÑ °ü½ÉÀ» °¡Áö°í ÀÖ´Â µ¶ÀÚµéÀº ¾Ë°í
ÀÖÀ» °Å¶ó »ý°¢À» Çϴµ¥, 2000³â PLoP
ÄÁÆÛ·±½º°¡ 8¿ù 13ÀÏ¿¡ ¿¸®°í, ÀÌ ÄÁÆÛ·±½ºÀÇ ³í¹® ¸¶°¨ÀÏÀº 5¿ù 8ÀÏÀ̶ó´Â °ÍÀ». ÀÛ³âºÎÅÍ ÀÌ ÄÁÆÛ·±½º¿¡ ³í¹®À» ³»¸®¶ó
»ý°¢À» °¡Áö°í ÀÖ´Ù°¡ ¿Ã 4¿ù¿¡ ½Çõ¿¡ ¿Å°å´Ù. pattern writing¿¡ ´ëÇؼ Âü ¸¹Àº °ÍÀ» ´À³¢°Ô ÇÑ °úÁ¤À̾ú´Ù. ³ªÁß¿¡
½Ã°£ÀÌ ³ª¸é ¿Ã 4¿ùÀÇ °æÇèÀ» ÇÑ ¹ø À̾߱â ÇßÀ¸¸é ÁÁ°Ú´Ù. ÀÌ ¹øÈ£¿¡ ÇÊÀÚ°¡ ¾´ patternÀ» °ø°³ÇÒ »ý°¢À» °¡Áö°í ÀÖ¾ú´Âµ¥,
¾ÆÁ÷ Á¤¸®°¡ µÇÁö ¾ÊÀº °ü°è·Î ´ÙÀ½ È£·Î ¹Ì·é´Ù. ´ÙÀ½ ÁÖ ¿ù¿äÀÏÀÌ ¾î¹öÀÌ ³¯Àε¥.. ³í¹® ¸¶¹«¸® ÀÏÀÌ ³²¾Æ¼ ÁÖ¸»¿¡ Áý¿¡
°¥ ¼ö ÀÖÀ»Áö Àß ¸ð¸£°Ú´Ù. |
oonewsletter - 2000/5/3 |