µðÀÚÀÎ ÆÐÅÏ(4) - º¹Á¦ ¾ç µ¹¸®(Dolly) ?


À̽ÂÀÏ
E-mail:gaialee@icu.ac.kr
Çѱ¹Á¤º¸Åë½Å´ëÇпø´ëÇб³
Homepage:http://www.icu.ac.kr/


´º½º·¹ÅÍ 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 {
    ¡¦
    private Point center_;
    private int radius;
    ¡¦
    public Circle(Circle c_, Point newP_) {
       ¡¦
       center_ = c_.position(newP_);
       radius = c_.radius;
       ¡¦
    }
    ¡¦
    public Shape clone(Point mouseP_) {
       return new Circle(this, mouseP_);
    }
    ¡¦
    public Point position(Point p_) { ¡¦ }
    ¡¦
}

RectangleÀÇ °æ¿ìµµ CircleÀÇ °æ¿ì¿Í ºñ½ÁÇÑ ¼Ò½º Äڵ带 °¡Áú °ÍÀÌ´Ù. ÀÌÁ¦ ¿ì¸®°¡ »ç¿ëÇÒ °´Ã¼¿¡ º¹Á¦ ´É·ÂÀ» ºÎ¿©ÇØ ÁÖ¾ú´Ù. ÀÌÁ¦ º¹Á¦ ´É·ÂÀ» °¡Áø ÇÁ·ÎÅäŸÀÔ °´Ã¼¸¦ °¡Áö°í ÆÈ·¡Æ®¸¦ ¸¸µé¾î º¸ÀÚ.

 

5.  Prototype ÆÐÅÏ

ÇÁ·ÎÅäŸÀÔ ÆÐÅÏÀÇ ±Ùº»Àº ¾Õ¿¡¼­ À̾߱âÇÑ cloneÀ̶ó´Â °úÁ¤À» ÅëÇؼ­ ÇØ´ç °´Ã¼¿¡ ´ëÇÑ Á¤º¸°¡ °ÅÀÇ ¾øÀÌ °´Ã¼¸¦ »ý¼ºÇÒ ¼ö ÀÖ´Ù´Â µ¥ ÀÖ´Ù. ¾î¶»°Ô ±×·² ¼ö ÀÖ´ÂÁö À̾߱âÇØ º¸°Ú´Ù.

ÇÁ·ÎÅäŸÀÔ ÆÐÅÏÀ» ÀÌ¿ëÇؼ­ ÇÁ·ÎÅäŸÀÔ °´Ã¼¸¦ »ý¼ºÇϱâ À§ÇÑ Å¬·¡½º ´ÙÀ̾î±×·¥Àº ±×¸² 4¿Í °°Àº ±¸Á¶°¡ µÉ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ±×¸² 4ÀÇ Å¬·¡½º ´ÙÀ̾î±×·¥¿¡¼­ ¡®PrototypeBuilder Ŭ·¡½º´Â ÇÁ·ÎÅäŸÀÔ °´Ã¼¸¦ »ý¼ºÇÏ¿© ¡®Palette¡¯ °´Ã¼¿¡ µî·Ï½ÃÅ°´Â ÀÏÀ» ÇÑ´Ù. ±×¸®°í, Palette °´Ã¼´Â PrototypeBuilder°¡ »ý¼ºÇÏ¿© µî·Ï½ÃŲ ÇÁ·ÎÅäŸÀÔ °´Ã¼¸¦ º¸°üÇÏ°í ÀÖ´Ù°¡, ÆÈ·¡Æ®¸¦ »ç¿ëÇÏ´Â ´Ù¸¥ °´Ã¼°¡ ÇÁ·ÎÅäŸÀÔ °´Ã¼¸¦ ¿øÇÒ °æ¿ì¿¡, ÇØ´ç °´Ã¼ÀÇ Å¬·¡½º¸¦ ÀÌ¿ëÇÏ¿© ÇØ´ç °´Ã¼¸¦ »õ·Ó°Ô »ý¼ºÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó, ÇØ´ç °´Ã¼¸¦ cloning ÇÑ´Ù. Áï, ÀÚ½ÅÀÇ º¹Á¦ °´Ã¼¸¦ ÁØ´Ù.

±×¸² 4. ÆÈ·¡Æ®¸¦ À§ÇÑ Å¬·¡½º ´ÙÀ̾î±×·¥


PrototypeBuilder¿Í Palette Ŭ·¡½º´Â ´ÙÀ½°ú °°ÀÌ ±¸ÇöµÉ ¼ö ÀÖÀ» °ÍÀÌ´Ù.

class PrototypeBuilder {
    ¡¦
    private Palette pt_ = new Palette();
    ¡¦
    public void createPrototype() {
        ¡¦
        pt_.addShape(¡°circle¡±, new Circle());
        pt_.addShape(¡°rectangle¡±, new Rectangle());
        ¡¦
    }
    ¡¦
}
 

class Palette {
    ¡¦
    private Hashtable shapePool_ = new Hashtable();
    ¡¦
    public void addShape(String key, Shape sp_) {
        ¡¦
        shapePool_.put (key, sp_);
        ¡¦
    }
    ¡¦
    public Shape getShape(String key) {
        ¡¦
        return ((Shape)shapePool_.get(key)).clone();
    }
    ¡¦
}
 

À§ÀÇ ¼Ò½º¿¡¼­ º¼ ¼ö ÀÖµíÀÌ 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