µðÀÚÀÎ ÆÐÅÏ(5) - Á¤¸® Á¤µ·...


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


Áö³­ È£±îÁö´Â °´Ã¼ÀÇ »ý¼º ¹æ¹ý¿¡ ´ëÇؼ­¸¸ À̾߱⸦ ÇÏ¿´´Ù. Áö±Ý ±îÁö À̾߱âÇÑ ³»¿ëÀ» Á¤¸®ÇØ º¸ÀÚ. ´º½º·¹ÅÍ 2È£¿¡¼­´Â °´Ã¼ »ý¼º¿¡ À־ÀÇ Å¸ÀÔ ÀÇÁ¸¼ºÀ» ÁÙÀÏ ¼ö ÀÖ´Â ÆÐÅÏ¿¡ ´ëÇؼ­ À̾߱⸦ ÇØ º¸¾Ò°í, 3È£¿¡¼­´Â µ¿ÀûÀÎ °´Ã¼ ŸÀÔ º¯°æÀ» °¡´ÉÇÏ°Ô ÇØ ÁÖ´Â ÆÐÅÏ¿¡ ´ëÇؼ­ ¾Ë¾Æº¸¾Ò´Ù. ±×¸®°í, 4È£¿¡¼­´Â °´Ã¼ÀÇ Å¸ÀÔ °áÁ¤ ¹æ¹ý¿¡ µû¸¥ °´Ã¼ÀÇ »ý¼º ¹æ¹ýÀ» Ŭ·¡½º ±â¹ÝÀÇ ¹æ¹ý°ú ÇÁ·ÎÅäŸÀÔ ±â¹ÝÀÇ ¹æ¹ýÀ¸·Î ±¸ºÐ Áö¾î º¸¾Ò´Ù. ¸¹Àº µµ¿òÀÌ µÇ¾ú´ÂÁö ¸ð¸£°Ú´Ù. ^(^

ÀÌ ¹øÈ£¿¡ À̾߱âÇÏ·Á´Â °ÍÀº »ý¼ºµÇ¾î »ç¿ëµÈ °´Ã¼¸¦ ´Ù »ç¿ëÇÑ ÈÄ¿¡´Â À̸¦ ¾î¶»°Ô ó¸®ÇÒ °ÍÀΰ¡¿¡ ´ëÇÑ ¹®Á¦¸¦ ¾ð±ÞÇÑ ÆÐÅÏ¿¡ ´ëÇؼ­ À̾߱⸦ ÇÏ·Á°í ÇÑ´Ù. ´Ù½Ã ¸»Çؼ­, ƯÁ¤ °´Ã¼¿¡°Ô ÇÒ´çµÇ¾ú´ø ÄÄÇ»ÅÍ ½Ã½ºÅÛÀÇ ÀÚ¿ø(resource)À» ´Ù¸¥ °´Ã¼µéÀÌ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ´Ù½Ã ½Ã½ºÅÛ¿¡ µÇµ¹¸®´Â ¹®Á¦¿Í ½Ã½ºÅÛÀÇ ¿Àµ¿ÀÛÀ» ¹æÁöÇϱâ À§Çؼ­ ¾î¶² ¼ø¼­·Î µÇµ¹¸± °ÍÀΰ¡ÀÇ ¹®Á¦¿¡ ´ëÇÑ ÇÑ ÇØ°áÃ¥À» ¾Ë¾Æ º¸°íÀÚ ÇÑ´Ù. »ç½Ç ÀÌ ¹®Á¦´Â  ÇÁ·Î±×·¡¸ÓµéÀÌ Ç×»ó ÁÖÀǸ¦ ±â¿ï¿© ¿Ô´ø ÁÖÁ¦ÀÏ »Ó¸¸ ¾Æ´Ï¶ó, ÄÄÇ»ÅÍ ½Ã½ºÅÛ¿¡ °ü·ÃµÈ ´ëºÎºÐÀÇ ÁÖÁ¦°¡ ÇÑÁ¤µÈ ÄÄÇ»ÅÍÀÇ ÀÚ¿øÀ» ¾î¶»°Ô Çϸé È¿À²ÀûÀ¸·Î ±×¸®°í ½Ã½ºÅÛÀÇ Á¤È®¼ºÀ» ³ôÀÌ´Â Ãø¸é¿¡¼­ »ç¿ëµÉ ¼ö Àִ°¡¿¡ ±× ÃÊÁ¡ÀÌ ¸ÂÃß¾îÁ® ÀÖ´Â °ÍÀÌ »ç½ÇÀÌ´Ù.  ¿äÁò¿¡´Â ¿î¿µÃ¼Á¦°¡ ÁÁ¾ÆÁ®¼­(?) ÀÌ·± ÁÖÁ¦¿Í °ü·ÃµÈ Ã¥ÀÚ¸¦ ã¾Æº¸±â ÈûµéÁö¸¸, ¿Ö ¿¹Àü¿¡ DOS¸¦ ¸¹ÀÌ »ç¿ëÇÏ´ø ½ÃÀý¿¡´Â '¸Þ¸ð¸® °ü¸®'¿¡ ´ëÇÑ ÁÖÁ¦·Î ¾²¿©Áø Ã¥µéÀ» ½É½ÉÄ¡ ¾Ê°Ô ã¾Æ º¼ ¼ö ÀÖ¾ú´ø °ÍÀ» ¾Æ´Â µ¶ÀÚ´Â ±â¾ïÇÒ °ÍÀÌ´Ù. ÀÌ·± ÀÌÀ¯·Î ¿äÁò¿¡´Â Æò»ó½Ã¿¡ ½Ã½ºÅÛÀ» µðÀÚÀÎÇÏ°í ±¸ÇöÇϸ鼭 °´Ã¼ ¼Ò¸ê(destruction)¹®Á¦¿¡ ´ëÇؼ­ ±×¸® ½É°¢ÇÏ°Ô ¹Þ¾ÆµéÀÎ µ¶ÀÚ°¡ ¸¹Áö ¾ÊÀ» °Å¶õ »ý°¢ÀÌ µÇ±âµµ ÇÑ´Ù. ÇÏÁö¸¸, ½Ã½ºÅÛÀ» ¸Úµé¾îÁö°Ô µðÀÚÀÎÇÏ·Á¸é ÀÌ¿¡ ´ëÇÑ °í·Á¸¦ ÇØ ÁÖ¾î¾ß ÇÒ °ÍÀÌ´Ù.

1.  ¹«¾ùÀÌ ¹®Á¦Àΰ¡?

GoF Ã¥[1]¿¡ ³ªÅ¸³ª ÀÖ´Â °´Ã¼ »ý¼º¿¡ °ü·ÃµÈ ÆÐÅÏÀ» À¯½ÉÈ÷ º¸¸é ÇÑ °¡Áö Áß¿äÇÑ °ÍÀ» À̾߱âÇÏÁö ¾Ê°í ÀÖ´Ù.  Factory Method, Singleton °ú  °°Àº °´Ã¼ »ý¼º¿¡ °ü·ÃµÈ ÆÐÅϵéÀº °´Ã¼ »ý¼º¿¡ ´ëÇÑ À¯¿ëÇÑ µðÀÚÀÎÀ» Á¦°øÇØ ÁÖ°í ÀÖÁö¸¸, »ý¼ºµÈ °´Ã¼°¡ »ç¿ëµÈ ÈÄ¿¡ ÀÌ °´Ã¼°¡ »ç¿ëÇÑ ÄÄÇ»ÅÍ ½Ã½ºÅÛÀÇ ÀÚ¿øÀ» µÇµ¹¸± ¼ö ÀÖ´Â È¿°úÀûÀÎ ³»¿ë¿¡ ´ëÇÑ µðÀÚÀÎÀº °í·ÁÇÏ°í ÀÖÁö ¾Ê´Ù.

¿äÁò°ú °°ÀÌ ÄÄÇ»Æà ȯ°æÀÌ Çϵå¿þ¾îÀûÀ¸·Î³ª ¼ÒÇÁÆ®¿þ¾î ÀûÀ¸·Î ¾ÆÁÖ Ç³¿ä·Î¿î ½Ã±â¿¡´Â °´Ã¼ ¼Ò¸ê¿¡ ´ëÇÑ ¹®Á¦¸¦ ±×¸® ½É°¢ÇÏ°Ô »ý°¢ÇÏÁö ¾Ê¾Æµµ ½Ã½ºÅÛÀÌ ¾î´À Á¤µµ ¿øÈ°ÇÏ°Ô µ¹¾Æ°¡´Â °Íó·³ º¸ÀÏ °ÍÀÌ´Ù. ¿ì¼± Çϵå¿þ¾îÀûÀ¸·Î ¸Þ¸ð¸®ÀÇ °¡°ÝÀÌ ³ôÁö ¾Ê¾Æ¼­, À¢¸¸ÇÑ °³Àοë ÄÄÇ»Å͵µ ¸Þ¸ð¸®°¡ ÃæºÐÈ÷ Å©±â ¶§¹®¿¡, ¸Þ¸ð¸®¿¡ ¾²·¹±â°¡ Á» ³Î·Á À־ ½Ã½ºÅÛÀÌ µ¹¾Æ°¡´Â µ¥´Â ±×¸® ¹®Á¦°¡ µÇÁö ¾ÊÀ» ¼ö ÀÖÀ» °ÍÀÌ´Ù. ±×¸®°í, ÃÖ±ÙÀÇ ¿î¿µÃ¼Á¦µéÀº ½Ã½ºÅÛ ÀÚ¿øÀÇ È¿À²ÀûÀÎ È°¿ëÀ» À§ÇÏ¿© ¿©·¯ °¡Áö ¾ÈÀüÀåÄ¡¸¦ Æ÷ÇÔÇÏ°í ÀÖ±â  ¶§¹®¿¡ ¿î¿µÃ¼Á¦ Â÷¿ø¿¡¼­ Á¶±×¸¶ÇÑ ÇÁ·Î±×·¥µéÀÌ ½ÇÇàµÇ¸é¼­ ³²±â´Â ¾²·¹±âµéÀ» ȸ¼öÇÏ¿© ¾ø¾Ö ¹ö¸°´Ù. ÇÏÁö¸¸, ÀÌ ¹®Á¦´Â ÀϹÝÀûÀ¸·Î µÎ °¡Áö ½Ã½ºÅÛ¿¡ À־ ¾ÆÁÖ Ä¡¸íÀûÀÌ µÉ ¼ö°¡ ÀÖ´Ù°í »ý°¢ÇÑ´Ù.  Ã¹Â°´Â ¼­¹ö¿ë ÇÁ·Î±×·¥°ú  °°Àº Àå½Ã°£ µ¿À۵Ǿî¾ß ÇÏ´Â ±Ô¸ð°¡ Å« ½Ã½ºÅÛÀÇ °æ¿ìÀÌ°í, µÎ ¹ø°´Â ¾ÆÁÖ Á¦ÇÑÀûÀÎ ¸Þ¸ð¸®¸¦ °¡Áö´Â ÀÓº£µðµå ½Ã½ºÅÛ(embedded system)ÀÇ °æ¿ìÀÌ´Ù.  ÀüÀÚÀÇ °æ¿ì¿¡´Â ÀÏ´Ü ¼ÒÇÁÆ®¿þ¾î ½Ã½ºÅÛÀÌ µ¿À۵DZ⠽ÃÀÛÇϸé, ÇÏ·ç ÀÌƲÀÌ ¾Æ´Ï¶ó ¸î ´Þ ¶Ç´Â ¸î ³â µ¿¾È ¿î¿ëµÇ¾î¾ß ÇÏ´Â ¿ä±¸Á¶°Ç(requirement)¸¦ ¸¸Á·½ÃÄÑ¾ß ÇÑ´Ù. µû¶ó¼­, ÀÌ·± ½Ã½ºÅÛÀÌ Àå½Ã°£ ¾Æ¹« ¹®Á¦ ¾øÀÌ ¿î¿ëµÇ±â À§Çؼ­´Â »ç¿ëµÇ°í ³­ ÈÄ¿¡ ´õ ÀÌ»ó ÇÊ¿ä ¾ø¾îÁø ½Ã½ºÅÛÀÇ ÀÚ¿øÀº ±×¶§±×¶§ ´Ù¸¥ ÇÁ·Î¼¼½º ¶Ç´Â °´Ã¼°¡ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ¹ÝȯµÇ¾î¾ß ÇÒ °ÍÀÌ´Ù. ÀÌ·± ÇÊ¿äÁ¶°ÇÀ» ÃæºÐÈ÷ ¸¸Á·½ÃÅ°Áö ¸øÇϸé, ±× µðÀÚÀÎµÈ ½Ã½ºÅÛÀº ¸î ÀÏÀ» ¸ø °¡¼­ Àüü ½Ã½ºÅÛÀ» ´Ù¿î ½ÃÅ°´Â °á°ú¸¦ ÃÊ·¡ÇÒ ¼öµµ ÀÖÀ» °ÍÀÌ´Ù.  ÈÄÀÚÀÇ °æ¿ì´Â Á¶±×¸¶ÇÑ Çϵå¿þ¾î ½Ã½ºÅÛ¿¡ Á¶±×¸¶ÇÑ ÀÚü ¿î¿µÃ¼Á¦°¡ ¿î¿ëµÇ°í ±× À§¿¡¼­ ±× ½Ã½ºÅÛÀ» ±¸µ¿ÇÏ´Â µ¥ ÇÊ¿äÇÑ ÀÀ¿ëÇÁ·Î±×·¥À» µ¿ÀÛ½ÃÅ°´Â ±×·¯ÇÑ ½Ã½ºÅÛÀÌ´Ù. µû¶ó¼­, ÀÌ·± Á¾·ùÀÇ ½Ã½ºÅÛÀº »ç¿ë°¡´ÉÇÑ ½Ã½ºÅÛ ÀÚ¿øÀÌ »ó´ëÀûÀ¸·Î ¾ÆÁÖ ÀûÀ» ¼ö¹Û¿¡ ¾øÀ» °ÍÀ̸ç, ÀÌ·± °æ¿ìÀÇ ÀÚ¿ø°ü¸®´Â ¾ÆÁÖ Áß¿äÇÑ ¹®Á¦°¡ µÉ °ÍÀÌ´Ù.

µû¶ó¼­, µðÀÚÀÎ ÆÐÅÏ ºÐ¾ß¿¡¼­ ÀÌ·± ÀÚ¿ø È°¿ë°ú  °°Àº ¹®Á¦¸¦ È¿À²ÀûÀ¸·Î ÇØ°áÇÒ ¼ö ÀÖ´Â ÆÐÅÏ¿¡ ´ëÇÑ ¿¬±¸°¡ Áß¿äÇÏ´Ù°í »ý°¢ÇÑ´Ù. ÀÌ·± °üÁ¡¿¡¼­ ¿Í½ÌÅÏ ´ëÇÐ(Washington Univ.)ÀÇ Levine, Gill, Schmidt °¡ Á¦¾ÈÇÑ Object Lifecycle Manager ÆÐÅÏ[2]Àº ±× Àǹ̰¡ ÀÖ´Ù°í °³ÀÎÀûÀ¸·Î´Â »ý°¢ÇÑ´Ù.

2.  Object Lifecycle Manager ÆÐÅÏ

2.1 ÀüüÀûÀÎ ±¸Á¶

Levine, Gill, Schmidt °¡ Á¦¾ÈÇÑ Object Lifecycle Manager ÆÐÅÏÀº ±×¸² 1¿¡¼­ º¸ÀÌ´Â ¹Ù¿Í °°ÀÌ ±× ±¸Á¶´Â ¾ÆÁÖ °£´ÜÇÏ´Ù(»ç½Ç Áö±Ý±îÁö º¸¾Æ¿Â ÆÐÅÏ Áß¿¡¼­ ±× ±¸Á¶°¡ º¹ÀâÇÑ °ÍÀÌ ÀÖ¾ú´ø°¡?).  ÀϹÝÀûÀÎ ÀÀ¿ëÇÁ·Î±×·¥(application)ÀÇ °³ÀÔÀ» »©¸é ¼¼ °³ÀÇ °´Ã¼·Î ±¸¼ºµÇ¾î ÀÖ´Ù.  SingletonÀº ´Ù¸¥ °´Ã¼ »ý¼º ÆÐÅÏ¿¡ ÀÇÇؼ­ µ¿ÀûÀ¸·Î »ý¼ºµÇ¾î °ü¸®µÇ¾îÁ®¾ß ÇÒ ÀϹÝÀûÀÎ °´Ã¼(dynamic object)¸¦ ³ªÅ¸³»°í( SingletonÀ» ¸ð¸£´Â µ¶ÀÚ°¡ Àִ°¡? GoF Ã¥À» º¸±â ¹Ù¶õ´Ù. ¾ÆÁÖ °£´ÜÇÑ µðÀÚÀÎ ÆÐÅÏÀÌ´Ù. ¿©±â¼­´Â ÀÌ ÆÐÅÏÀ» ÀÌ¹Ì ¾Ë°í ÀÖ´Ù´Â °¡Á¤ÇÏ¿¡ À̾߱⸦ ÇÒ °ÍÀÌ´Ù).  Preallocated Object ´Â ÀÀ¿ëÇÁ·Î±×·¥¿¡¼­ »ç¿ëµÇ±â Àü¿¡ »ý¼ºµÇ¾îÁö°í ÀÀ¿ëÇÁ·Î±×·¥ÀÌ ¼Ò¸êµÉ ¶§ ÇÔ²² ¼Ò¸êµÇ´Â Á¤ÀûÀÎ °´Ã¼(static object)¸¦ ÀǹÌÇÑ´Ù. ±×¸®°í, Object Lifecycle Manager´Â ÀÌ µÎ ŸÀÔÀÇ °´Ã¼ÀÇ »ý¼º°ú ¼Ò¸êÀ» ÀÀ¿ëÇÁ·Î±×·¥°ú´Â µ¶¸³ÀûÀ¸·Î °ü¸®ÇØ ÁÖ´Â °´Ã¼ÀÌ´Ù.  ÀÌ¿¡ ´ëÇÑ ±¸Ã¼ÀûÀÎ À̾߱â´Â Á» µÚ·Î ¹Ì·ç°í ±×¸² 1ÀÇ ÀüüÀûÀÎ ½Ã½ºÅÛ µðÀÚÀÎÀ» º¸¸é¼­, ÀÌ ±¸Á¶°¡ ¾î¶² ÀÌÁ¡À» ÁÙ ¼ö ÀÖ´ÂÁö ÇÑ ¹ø »ý°¢ÇØ º¸´Â °ÍÀÌ ´õ Áß¿äÇϸ®¶ó »ý°¢ÇÑ´Ù.

 

±×¸² 1. Object Lifecycle Manager ÆÐÅÏ


Áï, ÀÌ ÆÐÅÏ ±¸Á¶¸¦ °¡¸¸È÷ »ìÆ캸¸é ÀüüÀûÀ¸·Î ´ÙÀ½°ú °°À½À» ¾Ë ¼ö ÀÖ´Ù. Áö³­ È£±îÁöÀÇ °´Ã¼ »ý¼º ¹æ¹ýÀÌ ¾î¶°Çߴ°¡? »ç¿ëÇÒ °´Ã¼¸¦ »ý¼ºÇÏ´Â ºÎºÐÀ» ÀÀ¿ëÇÁ·Î±×·¥ÀÇ ·ÎÁ÷(logic)¿¡¼­ ºÐ¸®½ÃÄѼ­ µðÀÚÀÎÇÔÀ¸·Î½á, ½Ã½ºÅÛÀÇ °´Ã¼ ¿î¿ë¿¡ ´ëÇÑ À¯µ¿¼º(flexibility)À» ³ôÀÌ°í, °á°úÀûÀ¸·Î ½Ã½ºÅÛÀÇ ¾ÈÁ¤¼º(stability)µµ ³ôÀÏ ¼ö ÀÖÀ½À» ¾Ë ¼ö ÀÖ¾ú´Ù. ÀÌ ÆÐÅÏ ±¸Á¶´Â ÀÌ¿Í ºñ½ÁÇÏ°Ô °´Ã¼ ¼Ò¸ê¿¡ ´ëÇÑ ºÎºÐ±îÁöµµ ÀÀ¿ëÇÁ·Î±×·¥¿¡¼­ ºÐ¸®ÇÏ¿© °ü¸® ÇÔÀ¸·Î½á ÀüüÀûÀÎ ½Ã½ºÅÛÀÇ ¾ÈÁ¤¼º°ú È®À强 ±×¸®°í À¯µ¿¼ºÀ» ´õ ³ôÀÌ°í ÀÖ´Ù. °á°úÀûÀ¸·Î ÀÌ ÆÐÅÏ ±¸Á¶¸¦ ÀüüÀûÀÎ ½Ã½ºÅÛ µðÀÚÀο¡ µµÀÔÇϸé ÀüüÀûÀÎ ÀÀ¿ëÇÁ·Î±×·¥ÀÇ ±¸Á¶´Â °´Ã¼»ý¼º, °´Ã¼¼Ò¸ê, ÀÀ¿ëÇÁ·Î±×·¥ ·ÎÁ÷ÀÌ ¸ðµÎ ºÐ¸®µÇ´Â ±¸Á¶¸¦ °¡Áö°Ô µÇ¹Ç·Î ¾Õ¿¡¼­ ¾ð±ÞÇÑ ÁÁÀº ½Ã½ºÅÛ µðÀÚÀÎÀÌ µÉ °ÍÀÌ´Ù.  ¾î¶²°¡ ±¸¹Ì°¡ ´ç±âÁö ¾Ê´Â°¡?

2.2 ¼¼ºÎÀûÀÎ ³»¿ë

±×¸² 1ÀÇ Object Lifecycle Manager¿¡ ´ëÇÑ ±¸Ã¼ÀûÀÎ À̾߱â´Â »ó´çÈ÷ ½Ã½ºÅÛ ÀÇÁ¸ÀûÀÌ°í ±¸Çö¿¡ ÀÇÁ¸ÀûÀÎ À̾߱Ⱑ µÈ´Ù. ¿¹¸¦ µé¾î¼­, ÀÌ ÆÐÅÏÀÌ C++·Î ±¸ÇöÇÒ °æ¿ì¿Í ÀÚ¹Ù(Java) ¾ð¾î·Î ±¸ÇöÇÒ °æ¿ì´Â »ó´çÈ÷ ¸¹Àº Â÷À̸¦ º¸ÀÌ°Ô µÉ °ÍÀÌ´Ù. C++ ¾ð¾î¸¦ »ç¿ëÇÒ °æ¿ì¿¡´Â ÇÁ·Î±×·¡¸Ó°¡ °´Ã¼°¡ »ç¿ëÇÏ°í ÀÖ¾ú´ø ½Ã½ºÅÛ ÀÚ¿ø¿¡ ´ëÇؼ­ ¸í½ÃÀûÀ¸·Î ÀÚ¿ø ¼Ò¸ê¿¡ ´ëÇÑ ±¸ÇöÀ» ÇØ ÁÖ¾î¾ß ÇÏÁö¸¸, ÀÚ¹ÙÀÇ °æ¿ì¿¡´Â ¾ð¾î Â÷¿ø¿¡¼­ Garbage collectionÀ̶ó´Â ÀÚ¿ø ¼Ò¸ê¿¡ ´ëÇÑ ºÎºÐÀ» Ã¥ÀÓÁö´Â ¸ÞÄ¿´ÏÁòÀ» Áö¿øÇÏ°í ÀÖ´Ù. µû¶ó¼­, ÀÚ¹Ù¸¦ »ç¿ëÇÏ¿© À§ÀÇ ÆÐÅÏÀ» °í·ÁÇÒ °æ¿ì´Â ±× ¾ç»óÀÌ ¸¹ÀÌ ´Þ¶óÁö°Ô µÉ °ÍÀÌ´Ù. °æ¿ì¿¡ µû¶ó¼­´Â ÀÌ ÆÐÅÏ°ú  °°ÀÌ ¸í½ÃÀûÀ¸·Î ½Ã½ºÅÛ ÀÚ¿ø È°¿ë Ãø¸é¿¡¼­ ½Ã½ºÅÛ µðÀÚÀ̳ʰ¡ ½Å°æÀ» ¾²Áö ¾Ê¾Æµµ µÇ´Â °æ¿ì°¡ ÀÖÀ» °ÍÀÌ´Ù.  

Object Lifacycle Manager ÆÐÅÏÀÇ ÀúÀÚµéÀº ÀÌ ÆÐÅÏ¿¡ ±¸Ã¼ÀûÀÎ ¿¹¿Í ±×¿¡ ´ëÇÑ ÇØ°áÃ¥, ±×¸®°í Àü¹ÝÀûÀÎ À̾߱⸦ C++¾ð¾î¸¦ ÀÌ¿ëÇÏ¿© ½Ã½ºÅÛÀ» ±¸ÃàÇϴ ȯ°æ¿¡ ÃÊÁ¡À» ¸ÂÃ߾ ¼³¸íÀ» ÇØ ³õ¾Ò´Ù. ÇÏÁö¸¸, ¿©±â¼­´Â ±ÛÀÇ ÀÏ°ü¼ºÀ» À§Çؼ­ ÇÊÀÚµéÀÌ ÁöÀûÇÑ ÀÚ¹Ù¾ð¾î¸¦ »ç¿ëÇÏ¿© ½Ã½ºÅÛÀ» µðÀÚÀÎÇÒ °æ¿ì¿¡ ÀÌ ÆÐÅÏÀÌ À¯¿ëÇÏ°Ô »ç¿ëµÉ ¼ö ÀÖ´Â °æ¿ì¿¡ ´ëÇؼ­¸¸ ¾ð±ÞÇϱâ·Î ÇÏ°Ú´Ù.  C++¾ð¾î¸¦ ÀÌ¿ëÇÑ ½Ã½ºÅÛ °³¹ß¿¡ °ü½ÉÀÌ ¸¹Àº µ¶ÀÚ´Â ÀÌ ÆÐÅÏÀ» ¼³¸íÇÑ ³í¹®À» ±¸Çؼ­ ÀÚ¼¼È÷ Àо¸é ¸¹Àº µµ¿òÀÌ µÉ °ÍÀ¸·Î »ý°¢ÇÑ´Ù. (ÀÌ ³í¹®Àº 99³â PLoP ÄÁÆÛ·±½º »çÀÌÆ®¿¡ °¡¸é ¹«·á·Î ¾òÀ» ¼ö ÀÖ´Ù).

3.  Java ¿¡¼­´Â¡¦

ȤÀÚ´Â ÀÚ¹Ù¾ð¾î¸¦ »ç¿ëÇÏ¿© ÇÁ·Î±×·¥À» ±¸ÇöÇϸé, ´õ ÀÌ»ó »ç¿ëµÇÁö ¾Ê´Â °´Ã¼¿¡ ´ëÇÑ Ã³¸®¸¦ »ý°¢ÇÏÁö ¾Ê¾Æµµ µÈ´Ù°í ±»°Ô(?) ¹Ï°í ÀÖÀ»Áöµµ ¸ð¸£°Ú´Ù. Á»´õ ±¸Ã¼ÀûÀ¸·Î À̾߱âÇؼ­, ÀÚ¹Ù´Â ¾ð¾î Â÷¿ø¿¡¼­ ´õ ÀÌ»ó ÂüÁ¶(reference)µÇÁö ¾Ê´Â °´Ã¼¸¦ ÇÊ¿ä ¾ø´Â °´Ã¼·Î ÆÇ´ÜÇÏ¿© ±× °´Ã¼°¡ »ç¿ëÇÏ´ø ½Ã½ºÅÛ ÀÚ¿øÀ» ´Ù¸¥ °´Ã¼°¡ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï µÇµ¹¸®´Â Garbage Collection À̶ó ºÒ¸®´Â ¸ÞÄ¿´ÏÁòÀ» Áö¿øÇÏ°í ÀÖ±â  ¶§¹®¿¡ ½Ã½ºÅÛ µðÀÚÀ̳ʰ¡ ±¸Áö ±×·± °Í±îÁö ½Å°æ ¾²Áö ¾Ê¾Æµµ µÉ °Í  °°Àº »ý°¢ÀÌ µé °ÍÀÌ´Ù. ±×·¯³ª,  °æ¿ì¿¡ µû¶ó¼­´Â µðÀÚÀ̳ʰ¡ ¸í½ÃÀûÀ¸·Î ÀÌ·± °Í±îÁö ½Å°æ ½áÁà¾ß ÇÒ °æ¿ì°¡ ÀÖ´Ù.  ÇöÀç ÇÊÀÚÀÇ °æÇèÀ¸·Î´Â Object Lifecycle Manager ÆÐÅÏÀÇ ÀúÀÚµéÀÌ ÁöÀûÇÏ°í Grand[3]µµ ÁöÀûÇÑ Singleton ÆÐÅÏÀ» »ç¿ëÇÏ¿© °´Ã¼¸¦ »ý¼ºÇÒ °æ¿ì¿Í ºÐ»ê °´Ã¼¸¦ ÀÌ¿ëÇÏ¿© ºÐ»ê ½Ã½ºÅÛÀ» µðÀÚÀÎÇÒ °æ¿ìÀÌ´Ù. ÈÄÀÚÀÇ °æ¿ì´Â ÇÊÀÚ°¡ ¿¬±¸½Ç¿¡¼­ ÀÚ¹Ù¸¦ »ç¿ëÇÏ¿© ºÐ»ê¿öÅ©ÇÃ·Î¿ì ½Ã½ºÅÛ(Distributed workflow system)À» µðÀÚÀÎÇÏ°í ±¸ÇöÇϸ鼭 ÇÑÂüÀ» °í¹ÎÇÏ°Ô ¸¸µé¾ú´ø ±â¾ïÀÌ ÀÖ´Ù. ÈÄÀÚÀÇ °æ¿ì´Â ÀÌ ¹øÈ£¿¡¼­ À̾߱âÇÏ·Á°í ÇÏ´Â ÆÐÅÏ°ú´Â ±¸Á¶ÀûÀ¸·Î º° °ü°è°¡ ¾øÀ¸¹Ç·Î ¿©±â¼­´Â ÀüÀÚÀÇ °æ¿ì¸¸À» ¾ð±ÞÇÒ °ÍÀÌ´Ù.

3.1 ¹®Á¦Á¡ ¹× ÇÑ °¡Áö ÇØ°á ¹æ¾È

(µ¶ÀÚµéÀÌ Àß ¾Ë°í ÀÖµíÀÌ?) Singleton ÆÐÅÏÀº ÇÑ Å¬·¡½ºÀÇ ÀνºÅϽº°¡ Çϳª¸¸ »ý±âµµ·Ï ÇÏ´Â °ÍÀ» °¡´ÉÇÏ°Ô ÇØ ÁÖ´Â ÆÐÅÏÀ̸ç, ÇØ´ç Ŭ·¡½º ŸÀÔÀÇ °´Ã¼°¡ Çϳª¸¸ ÇÊ¿ä·Î ÇÏ´Â °æ¿ì¿¡ ¾ÆÁÖ À¯¿ëÇÏ°Ô »ç¿ëµÇ´Â ÆÐÅÏÀÌ´Ù. ÀÌ ÆÐÅÏÀº ÇϳªÀÇ Å¬·¡½º·Î ±¸¼ºµÇ¾î ÀÖ±â  ¶§¹®¿¡ ÀÌ ÆÐÅÏÀ» ÀÌ¿ëÇÑ Å¬·¡½º¸¦ Singleton Ŭ·¡½º¶ó ºÎ¸¥´Ù.

Singleton Ŭ·¡½º¸¦ ¾î¶² °´Ã¼¿¡¼­ Á÷Á¢ÀûÀ¸·Î ÂüÁ¶ÇÏ¿© »ç¿ëÇÒ °æ¿ì¿¡´Â ¹®Á¦°¡ ¾ø´Ù. ±×·¯³ª,  ÀÌ Singleton Ŭ·¡½º°¡ Á÷Á¢ÀûÀ¸·Î »ç¿ëµÇÁö ¾Ê°í, µ¿ÀûÀ¸·Î ¸Þ¸ð¸®¿¡ ÀûÀç(load)µÇ´Â °´Ã¼¸¦ ÅëÇؼ­ °£Á¢ÀûÀ¸·Î »ç¿ëµÉ °æ¿ì¿¡´Â Á» ½É°¢ÇÑ ¹®Á¦¸¦ ÀÏÀ¸Å²´Ù. ÀÌÀ¯´Â °£´ÜÇÏ´Ù. °´Ã¼ A°¡ °´Ã¼ B¸¦ ÅëÇؼ­ Singleton Ŭ·¡½ºÀÇ °´Ã¼¸¦ »ç¿ëÇÑ´Ù°í °¡Á¤ÇØ º¸ÀÚ. ¶ÇÇÑ °´Ã¼ A´Â µ¿ÀûÀ¸·Î °´Ã¼ B¸¦ ÀûÀçÇؼ­ »ç¿ëÇÏ°í ÀÖ´Ù°í °¡Á¤ÇÏÀÚ. ÀÌ °æ¿ì¿¡ ÀÏ´Ü °´Ã¼ A°¡ °´Ã¼ B¸¦ µ¿ÀûÀ¸·Î ¸Þ¸ð¸®¿¡ ÀûÀçÇÏ¸é °´Ã¼ B¸¦ ÅëÇؼ­ Singleton Ŭ·¡½º´Â ÇϳªÀÇ °´Ã¼¸¦ »ý¼ºÇÏ°í ÀÌ¿¡ ´ëÇÑ ÂüÁ¶ÀÚ¸¦ °´Ã¼ BÀÇ ÂüÁ¶ÀÚ¿¡ ³Ñ°ÜÁØ´Ù. ÇÁ·Î±×·¥ÀÌ ¼öÇàµÇ´Ù°¡ °´Ã¼ A°¡ °´Ã¼ B¿¡ ´ëÇÑ ÂüÁ¶¸¦ ´õ ÀÌ»ó ÂüÁ¶ÇÏÁö ¾ÊÀ¸¸é ÀÚ¹ÙÀÇ garbage collection ¸ÞÄ¿´ÏÁò¿¡ ÀÇÇؼ­ °´Ã¼ B¿Í Singleton Ŭ·¡½ºÀÇ ÀνºÅϽº´Â ÇÊ¿ä ¾ø´Â °´Ã¼·Î µÇ¾î ¹ö¸°´Ù. ÀÌ·± »óÅ¿¡¼­, ´Ù½Ã °´Ã¼ A°¡ °´Ã¼ B¸¦ µ¿ÀûÀ¸·Î ÀûÀçÇϸé, Singleton Ŭ·¡½º´Â ´Ù½Ã »õ·Î¿î ÀνºÅϽº¸¦ »ý¼ºÇÏ¿© ÀÌ¿¡ ´ëÇÑ ÂüÁ¶ÀÚ¸¦ °´Ã¼ B¿¡ ³Ñ°ÜÁØ´Ù. µû¶ó¼­, »õ·Ó°Ô »ý¼ºµÈ Singleton Ŭ·¡½ºÀÇ ÀνºÅϽº´Â ´Ù½Ã ÃʱâÈ­°¡ µÇ¾î ±âÁ¸ÀÇ °ªÀ» À¯ÁöÇÏÁö ¸øÇÏ°Ô µÈ´Ù. ÀÌ Singleton °´Ã¼°¡ Àüü ÇÁ·Î±×·¥ÀÇ ¼º´É¿¡ ´ëÇÑ Åë°è ÀڷḦ Áö¼ÓÀûÀ¸·Î À¯Áö ±â·ÏÇÏ´Â ¿ëµµ·Î »ç¿ëµÇ´Â °ÍÀ̾ú´Ù¸é, À§¿Í  °°Àº °æ¿ì¿¡ ÀüÇô ¾û¶×ÇÑ °á°ú¸¦ À¯¹ßÇÏ°Ô µÉ °ÍÀÌ´Ù.

À§¿Í  °°Àº °æ¿ìÀÇ ¹®Á¦¸¦ ÇØ°áÇÏ´Â ÇÑ °¡Áö ¹æ¹ýÀº Object Lifecycle Manager ÆÐÅÏÀ» »ç¿ëÇÏ´Â °ÍÀÌ´Ù. ÀÌ ÆÐÅÏ¿¡ ´ëÇÑ ±¸Ã¼ÀûÀÎ ±¸Çö ¹æ¹ýÀº GrandÀÇ Ã¥¿¡µµ ¾ð±ÞµÇ¾î ÀÖ´Â ¾ÆÁÖ ÀϹÝÀûÀÎ ¹æ¹ýÀ» »ç¿ëÇÑ´Ù. ´ÙÀ½ ¼Ò½º´Â Grand Ã¥¿¡ ³ª¿ÍÀÖ´Â ¼Ò½º¸¦ ÇÊÀÚ°¡ ±×¸² 1ÀÇ ÆÐÅÏ¿¡ µû¶ó ¾ÆÁÖ Á¶±Ý º¯ÇüÀ» °¡ÇØ º¸¾Ò´Ù.

public class ObjectLifecycleManager implements Runnable {
        ¡¦
        private static ObjectLifecycleManager lifeLine
                = new ObjectLifecycleManager();
        ¡¦
        private static HashSet protectedSet = new HashSet();
        ¡¦
        private ObjectLifecycleManager() {
                (new Thread(this)).start();
        }
        ¡¦
        public void run() {
                try{
                        wait();
                }catch(InterruptedException e) {¡¦}
        }
        ¡¦
        public static void at_exit(Object o) {
                protectedSet.add(o);
        }
        ¡¦
        public static void destroy(Object o) {
                protectedSet.remove(o);
        }
        ¡¦

}
         

Object Lifecycle ManagerÀÇ ÀúÀÚµéÀº ÀÌ °´Ã¼¸¦ ¶Ç´Ù¸¥ ÇϳªÀÇ SingletonÀ¸·Î ±¸ÇöÀ» ÇÏ¿´Áö¸¸, À§¿¡ ¼Ò°³ÇÑ ±¸Çö ¿¹´Â ÀÚ¹ÙÀÇ ¾²·¹µå(Thread)¸¦ ÀÌ¿ëÇÏ¿© ÀÀ¿ëÇÁ·Î±×·¥°ú´Â µ¶¸³ÀûÀ¸·Î ¿î¿ëµÇ´Â ObjectLifecycleManager °´Ã¼¸¦ ÅëÇؼ­ »ý¼ºµÈ Singleton °´Ã¼ÀÇ °ü¸®¸¦ ÇÏ°Ô ÇÑ °ÍÀÌ´Ù. ÀÌ·¸°Ô ÇÔÀ¸·Î½á À§¿¡¼­ À̾߱âµÇ¾ú´ø ÀÚ¹Ù ¾ð¾îÀÇ °æ¿ì¿¡ À־ÀÇ ¹®Á¦Á¡À» ÇØ°áÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.

ÀÌ ÆÐÅÏÀÇ ÀúÀÚµéÀÌ ³í¹®[2]¿¡¼­ ¹àÈ÷°í ÀÖ´Â Àǵµ(intent)·Î Object Lifecycle Manager ÆÐÅÏ¿¡ ´ëÇÑ À̾߱⸦ ÁÙÀÌ°Ú´Ù.

    The Object Lifecycle Manager pattern can be used to govern the entire lifecycle of objects, from creating them prior to their first use to ensuring they are destroyed properly at program termination. In addition, this pattern can be used to replace static object creation (and destruction) with dynamic object preallocation (and deallocation) that occurs automatically during application initialization (and termination).

    Object Lifecycle Manager ÆÐÅÏÀº °´Ã¼ÀÇ Àüü lifecycleÀ» °ü¸®Çϴµ¥ »ç¿ëµÉ ¼ö ÀÖ´Ù. ¿©±â¼­ Àüü lifecycleÀ̶ó´Â °ÍÀº óÀ½À¸·Î »ç¿ëµÇ±â Àü¿¡ »ý¼ºÇÏ´Â °Í¿¡¼­ºÎÅÍ ÇØ´ç ÇÁ·Î±×·¥ÀÌ Á¾·áµÇ¾úÀ» °æ¿ì¿¡ Á¤È®ÇÏ°Ô ¼Ò¸êµÇ´Â °ÍÀ» º¸ÀåÇÏ´Â °Í±îÁö¸¦ ¸»ÇÑ´Ù. ÀÌ ÆÐÅÏÀº ¶ÇÇÑ ÇØ´ç ÀÀ¿ëÇÁ·Î±×·¥ÀÌ ÃʱâÈ­µÉ ¶§, ÀÚµ¿À¸·Î µ¿Àû »ý¼º(¼Ò¸ê)µÉ ¼ö ÀÖ°Ô ÇÔÀ¸·Î½á Á¤ÀûÀÎ °´Ã¼ »ý¼º(¼Ò¸ê)¿¡¼­ ¿À´Â ¹®Á¦Á¡À» ÇØ°áÇÒ ¼ö ÀÖ´Ù. 

4.  °ü·Ã ÆÐÅÏ

¿©±â¼­ ¼Ò°³ÇÑ Object Lifecycle Manager ÆÐÅÏ°ú °ü·ÃÀÌ ÀÖ´Ù°í ÀúÀÚµéÀÌ ¾ð±ÞÇÑ ÆÐÅÏÀº Manger ÆÐÅÏÀÌ´Ù. ÀÌ ÆÐÅÏÀº 96³â PLoP¿¡ ¹ßÇ¥µÈ °ÍÀ¸·Î½á, ÇÊÀÚµµ °ü·Ã ³í¹®À» ±¸ÇÒ ¼ö ¾ø¾î¼­, ¾ÆÁ÷ ÀоÁö ¸øÇß´Ù. ´ÜÁö, ÆÐÅÏÀÇ ÀúÀÚµéÀÌ ºñ±³ÇØ ³õÀº ³»¿ëÀ» º¸°í ±× ³»¿ëÀ» ¹Ì·ç¾î ÁüÀÛÇÒ »ÓÀÌ´Ù. ÇÏÁö¸¸, ÀÌ ÆÐÅÏÀÇ ÀúÀÚµéÀÌ ÁÖÀåÇÏ´Â °ÍÀº Object Lifecycle Manager ÆÐÅÏÀÌ ±âÁ¸ÀÇ °´Ã¼ »ý¼º ÆÐÅÏÀ» º¸¿ÏÇÏ´Â ÆÐÅÏ(complementary pattern)À¸·Î½á Á߿伺À» °¡Áø´Ù´Â Á¡ÀÌ´Ù.

5.  ¸ÎÀ½¸»

ÀÌ ¹øÈ£¿¡´Â º°·Î ÇÑ À̾߱Ⱑ ¾ø´Â µí ÇÏ´Ù. ±×·¯³ª, ÀÌ ±ÛÀ» ÀÐÀ¸¸é¼­ µ¶ÀÚµéÀÌ ÇÑ °¡Áö ÁÖÀǸ¦ ±â¿ï¿´À¸¸é ÇÏ´Â ºÎºÐÀº ÀüüÀûÀÎ ½Ã½ºÅÛÀÇ µðÀÚÀÎ Ãø¸éÀÌ´Ù. ÇϳªÀÇ ½Ã½ºÅÛÀ» µðÀÚÀÎ ÇÒ ¶§, ¾î¶»°Ô Çϸé Á»´õ È¿À²ÀûÀÌ°í Æ°Æ°ÇÑ ½Ã½ºÅÛÀ» µðÀÚÀÎ ÇÒ ¼ö ÀÖÀ» °ÍÀΰ¡ ÇÏ´Â °ÍÀÌ´Ù. ±¸ÇöÀº ±× ´ÙÀ½ÀÇ ºÎÂ÷ÀûÀÎ ¹®Á¦ÀÌ´Ù. ¿ì¸®°¡ µðÀÚÀÎ ÆÐÅÏÀ» °øºÎÇØ¾ß ÇÏ´Â ÀÌÀ¯´Â ¹Ù·Î ¿©±â¿¡ ÀÖ´Ù°í °³ÀÎÀûÀ¸·Î´Â »ý°¢ÇÏ°í ÀÖ´Ù. ÀÌ·± °üÁ¡ÀÌ ¾Æ´Ï°í ±¸ÇöÀÇ °üÁ¡¿¡¼­ µðÀÚÀÎ ÆÐÅÏÀ» ¹Ù¶óº¸°í ±× ³»¿ëÀ» ÀÍÈ÷·Á µç´Ù¸é, ±× °ÍÀº °ÅÀÇ µµ¿òÀÌ µÇÁö ¾Ê´Â µµ±¸ÀÇ »ç¿ë¹ýÀ» ÀÍÈ÷°í ÀÖ´Â °ÍÀ̳ª ´Ù¸§¾øÀ» °ÍÀÌ´Ù.  µ¶ÀÚµéÀº ¾î¶² »ý°¢À» °¡Áö°í µðÀÚÀÎ ÆÐÅÏÀ» Á¢ÇØ ¿Ô´ÂÁö ±Ã±ÝÇÏ´Ù.  ÀÌ ¹øÈ£·Î °´Ã¼ »ý¼º°ú ¼Ò¸ê¿¡ ´ëÇÑ À̾߱⸦ ¸¶¹«¸® ¢°í, ´ÙÀ½ È£ºÎÅÍ´Â °´Ã¼ÁöÇ⠽ýºÅÛÀÇ ´Ù¸¥ °üÁ¡¿¡¼­ À¯¿ë¼ºÀÌ Å« µðÀÚÀÎ ÆÐÅϵéÀ» ã¾Æ¼­ À̾߱⸦ ÇØ º¸·Á ÇÑ´Ù.

Âü°í ¹®Çå

[1] Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides,  Design Patterns, Elements of Resuable Object-Oriented Software,  Addison-Wesley, 1995 

[2] David L. Levine, Christopher D. Gill, Douglas C. Schmidt, Object Lifecycle Manager A complementary Pattern for Controlling Object Creation and Destruction, PLoP 1999 conference

[3] Mark Grand, Patterns in Java, volume 1, Wiley, 1998  
 

(±Û Èıâ )

Áö³­ È£¿¡ ÇÊÀÚ°¡ PLoP2000¿¡ Á¦ÃâÇß´ø ÆÐÅÏÀ» ÀÌ ¹øÈ£¿¡ °ø°³Çϸ®¶ó À̾߱⸦ Çß¾ú½À´Ï´Ù. ±×·¯³ª. ÀÌ ¹øÈ£¿¡ ±×·¸°Ô ÇÏÁú ¸øÇÏ¿´½À´Ï´Ù. ÆÐÅÏ ³»¿ëÀÌ ¿µ¹®À¸·Î ÀÛ¼ºµÇ¾î ÀÖ±â  ¶§¹®¿¡ Çѱ۷Π¹ø¿ªÇÏ´Â ÀÛ¾÷ÀÌ ÇÊ¿äÇѵ¥¡¦ ³Ê¹« ¹Ù»µ¼­, ÇÒ ÀÏÀÌ ³Ê¹« ¸¹¾Æ¼­.. ±×·² ½Ã°£ÀÌ ¾ø¾ú½À´Ï´Ù. ÀÌ°Å ³Ê¹« Á˼ÛÇÕ´Ï´Ù. ÀÌ ¹øÈ£°¡ º¸¸§ °¡±îÀÌ ´Ê¾îÁø °Íµµ ÇÊÀÚµéÀÌ µµ´ëü °¨´çÇÒ ¼ö ¾øÀ» Á¤µµ·Î °ú·Î¿¡ ½Ã´Þ·Á¼­, °³ÀÎÀûÀÎ ÀÏÀ» °ÅÀÇ º¸±â Èûµé Á¤µµ¿´±â ¶§¹®ÀÔ´Ï´Ù.  °øºÎÇÏ·ª, ÇÁ·ÎÁ§Æ®ÇÏ·ª, ÀâÀÏÇÏ·ª¡¦  ÀÌÇØÇØ Áֽðí¿ä..  Á¦ ³í¹®ÀÌ ÇÑ ±Û·Î Á¤¸®µÇ´Â ´ë·Î ÀÌ °÷¿¡ ¼± º¸ÀÌ°Ú½À´Ï´Ù. ±×·±µ¥, »ç½Ç ÀϹÝÀûÀÎ ³»¿ëÀÇ ÆÐÅÏÀÌ ¾Æ´Ï¶ó¼­, Á¦ ÆÐÅÏÀÌ µµ¿òÀÌ µÇÁö´Â ¾ÊÀ» °Í °°½À´Ï´Ù. ¸î¸î ºÐµéÀ» Á¦¿ÜÇÏ°í´Â¿ä.. ±×·³ ´ÙÀ½ È£¿¡ ºËÁö¿ä..  ^(^

 


 oonewsletter - 2000/6/14