µðÀÚÀÎ ÆÐÅÏ(7) - ÇàÀ§ µ¶¸³!!


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


ÀÌ ¹øÈ£¿¡ À̾߱âÇØ º¸°íÀÚ ÇÏ´Â µðÀÚÀÎ ÆÐÅÏÀº ¡°Mediator[1]¡±¶ó´Â À̸§À» °¡Áö°í ÀÖ´Ù. »çÀüÀ» ã¾Æº¸¸é ¡®ÁßÀçÀÚ¡¯ Á¤µµÀÇ Àǹ̸¦ °¡Áö°í ÀÖ´Â ´Ü¾îÀÌ´Ù. ÀÌ ÆÐÅÏÀ» ÀÌ ¹øÈ£ÀÇ À̾߱⠰Ÿ®·Î »ïÀº ÀÌÀ¯´Â Áö³­ È£ÀÇ Observer ÆÐÅÏ[1]ÀÇ ¡®°ü·Ã ÆÐÅÏ¡¯ Àý¿¡¼­ ¾ð±ÞÇßµíÀÌ ObserverÆÐÅÏ°ú À¯»çÇÑ ºÎºÐÀÌ ÀÖ°í ±íÀÌ »ý°¢ÇØ º¼ ¹®Á¦¸¦ ´Ù·ç°í ÀÖ´Ù°í »ý°¢Çϱ⠶§¹®ÀÌ´Ù.

1.  ÀÇÁ¸¼º(dependency)ÀÇ ¹ß°ß

Áö³­ È£¿¡ À̾߱âÇßµíÀÌ °´Ã¼ÁöÇ⠽ýºÅÛÀÇ ±âº»±¸Á¶¸¦ °¡¸¸È÷ »ìÆ캸¸é, ±× ±¸Á¶´Â °´Ã¼µé°ú ±× °´Ã¼µé »çÀÌÀÇ ¾î¶² ƯÁ¤ÇÑ °ü°è(association)·Î µÇ¾î ÀÖÀ¸¸ç, ±× °ü°è¸¦ µû¶ó¼­, °´Ã¼µé »çÀÌ¿¡ ¾î¶² ƯÁ¤ÇÑ ÇàÀ§(behavior)¸¦ À¯¹ß½ÃÅ°´Â ¸Þ½ÃÁö(message)°¡ ¿Ô´Ù °¬´Ù ÇÏ´Â °ÍÀ¸·Î ÀÌÇØÇÒ ¼ö ÀÖ´Ù°í »ý°¢ÇÑ´Ù. ±×·±µ¥, °´Ã¼ÁöÇ⠽ýºÅÛÀ» µðÀÚÀÎ ÇÒ ¶§, ¹Ù·Î ÀÌ ºÎºÐ¿¡¼­ ¿ì¸®°¡ ÁÖÀǸ¦ ±â¿ï¿©¾ß ÇÏ´Â ºÎºÐÀÌ º¸ÀδÙ. °´Ã¼µé »çÀÌÀÇ ¸Þ½ÃÁö Àü´ÞÀ» ÅëÇÑ ÀÇÁ¸¼º(dependency)ÀÌ ¹Ù·Î ±×°ÍÀÌ´Ù. Çϳª ÀÌ»óÀÇ °´Ã¼µéÀÌ ¸ð¿©¼­ ¾î¶² ƯÁ¤ÇÑ °ü°è¸¦ À¯ÁöÇÔÀ¸·Î½á, ´Ù½Ã ¸»Çؼ­, ¼­·Î°£ÀÇ ¾î¶² ÀÇÁ¸¼ºÀ» °¡ÁüÀ¸·Î½á ÇØ´ç °´Ã¼ÁöÇ⠽ýºÅÛÀÌ º»·¡ ÀǵµÇÏ´ø ÇàÀ§¸¦ °¡Áö°Ô µÈ´Ù´Â Á¡¿¡¼­´Â ÀÌ·¯ÇÑ ÀÇÁ¸¼ºÀÌ ÇÊ¿¬ÀûÀÌÁö¸¸, ´ëºÎºÐÀÇ °æ¿ì¿¡´Â ÀÌ·± °´Ã¼µé »çÀÌÀÇ ÀÇÁ¸¼ºÀ» ÃÖ¼ÒÈ­ÇÏ´Â °ÍÀÌ Àüü ½Ã½ºÅÛÀÇ ¾ÈÁ¤¼ºÀ» Áõ´ë ½ÃÅ°°í °ü¸®¸¦ ½±°Ô ÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ¶ÇÇÑ ÇØ´ç ½Ã½ºÅÛÀ» ±¸¼ºÇÏ´Â ÄÞÆ÷³ÍÆ® Áß¿¡¼­ Àç»ç¿ë¼ºÀÌ Å©´Ù°í ÆǴܵǴ °Íµé¿¡ ´ëÇؼ­´Â ÇØ´ç ÄÞÆ÷³ÍÆ®°¡ ´Ù¸¥ ÄÞÆ÷³ÍÆ®¿ÍÀÇ °ü°è¸¦ ÅëÇÑ ÇàÀ§¸¦ Áö¿ªÈ­(localization)ÇÔÀ¸·Î½á ÇØ´ç ½Ã½ºÅÛÀ» º¸´Ù À¯¿¬ÇÏ°Ô ¸¸µé»Ó¸¸ ¾Æ´Ï¶ó, ±× ºÎºÐÀ» ´Ù¸¥ ½Ã½ºÅÛ¿¡¼­µµ °ÅÀÇ ±×´ë·Î »ç¿ëÇÒ ¼ö ÀÖ´Â Àç»ç¿ë¼ºÀ» ³ôÀÏ ¼ö ÀÖÀ» °ÍÀÌ´Ù.  Mediator ÆÐÅÏÀº ¹Ù·Î À§¿¡¼­ À̾߱âÇÑ µÎ °¡Áö ¹®Á¦, Áï, °´Ã¼°£ÀÇ ÀÇÁ¸¼ºÀ» ÃÖ¼ÒÈ­ ½ÃÅ°°í, ÇàÀ§¸¦ Áö¿ªÈ­ ½Ãų ¼ö ÀÖ´Â ÇÑ °¡Áö È¿°úÀûÀÎ ¹æ¾ÈÀ» Á¦½ÃÇØ ÁÖ°í ÀÖ´Ù. ¹°·Ð Àý´ëÀûÀÎ ÇعýÀº ¾Æ´Ï´Ù. ÇÏÁö¸¸, ÀÌ µÎ °¡Áö (Áß¿äÇÑ) ¹®Á¦¸¦ »ý°¢ÇÏ°Ô ¸¸µç´Ù´Â Á¡¿¡¼­ Àß »ìÆ캼 ¸¸ÇÑ °¡Ä¡°¡ ÀÖ´Â ÆÐÅÏÀ̶ó°í »ý°¢ÇÑ´Ù. 

³Ê¹« ÀϹÝÀûÀÌ°í Ãß»óÀûÀ¸·Î À̾߱⸦ Çß´Ù. ±¸Ã¼ÀûÀÎ ¿¹¸¦ µé¾î¼­ ´Ù½Ã ¹®Á¦ÀÇ Á߿伺À» »ý°¢ÇØ º¸ÀÚ. 

Mediator ÆÐÅÏÀ» À̾߱âÇÒ ¶§ Ç×»ó ¾ð±ÞÇÏ´Â ¿¹·Î ´ëºÎºÐÀÇ °³¹ßÀÚ³ª ½Ã½ºÅÛ µðÀÚÀ̳ʰ¡ ½±°Ô Á¢ÇÒ ¼ö ÀÖ´Â ¡®´ÙÀÌ¾Ë·Î±× ¹Ú½º(dialog box)¡¯°¡ ÀÖ´Ù.  ±×¸² 1Àº ÀͽºÇ÷η¯ÀÇ ÆÄÀÏ ¿­±â ´ÙÀÌ¾Ë·Î±× ¹Ú½º¸¦ ÇÊÀÚ°¡ ĸÃÄ(capture)ÇÑ °ÍÀÌ´Ù. 

±×¸² 1. ÆÄÀÏ ¿­±â ´ÙÀÌ¾Ë·Î±× ¹Ú½º

±×¸² 1ÀÇ ÆÄÀÏ ¿­±â ´ÙÀÌ¾Ë·Î±× ¹Ú½º¸¦ º¸¸é¼­ À§¿¡¼­ À̾߱â Çß´ø °ÍÀ» ´Ù½Ã »ý°¢ÇØ º¸ÀÚ. ±×¸² 1À» º¸¸é ¡®Ã£´Â À§Ä¡¡¯¸¦ Ç¥½ÃÇÏ´Â ComboBox¿¡ ³ªÅ¸³ª ÀÖ´Â µð·ºÅ丮¿¡ ¼ÓÇØ ÀÖ´Â µð·ºÅ丮¿Í ÆÄÀϵéÀÌ ListBox¿¡ ³ªÅ¸³ª ÀÖ´Ù. ±× Áß¿¡¼­ ¡®designpatterns1.html¡¯À̶ó´Â ÆÄÀÏÀÌ ¹ÝÀüµÇ¾î ¼±ÅõǾî ÀÖ°í, ±× ¼±ÅÃµÈ ÆÄÀÏÀº ´Ù½Ã ListBox¾Æ·¡ÀÇ ¡®ÆÄÀÏ À̸§¡¯À¸·Î À̸§ ºÙ¿©Áø ComboBox¿¡ Ç¥½ÃµÇ¾îÁ® ÀÖ´Ù. ¿©±â¼­ ´«¿©°Ü º¼ ³»¿ë Áß¿¡ Çϳª´Â ListBox¿¡ ¼±ÅÃµÈ ÆÄÀÏÀÌ ±× ¾Æ·¡ ComboBox¿¡ Ç¥½ÃµÈ´Ù´Â °ÍÀÌ´Ù. °Å²Ù·Î À̾߱âÇؼ­, ListBox¿¡¼­ ¼±ÅõǾîÁöÁö ¾ÊÀº ÆÄÀÏÀº ComboBox¿¡ Ç¥½ÃµÇÁö ¾Ê´Â´Ù. Áï, ComboBox´Â ListBox¿¡ ÀÇÁ¸¼ºÀ» °¡Áø´Ù. ´Ù¸¥ ºÎºÐÀ» º¸ÀÚ. ÆÄÀÏ ¿­±â ´ÙÀÌ¾Ë·Î±× ¹Ú½ºÀÇ Á¦ÀÏ ¾Æ·¡¿¡ À§Ä¡ÇÑ ¡®ÆÄÀÏ Çü½Ä¡¯À̶ó À̸§ ºÙ¿©Áø ComboBox¿¡´Â ¡®HTML ÆÄÀÏ¡¯À̶ó´Â ³»¿ëÀÌ Ç¥½ÃµÇ¾î ÀÖÀ¸¸ç, ÀÌ ³»¿ë¿¡ µû¶ó¼­, ListBox¿¡´Â html ÆÄÀÏ Çü½ÄÀ» °¡Áö´Â ÆÄÀϸ¸ÀÌ Ç¥½ÃµÇ°í ÀÖ´Ù. Áï, ÆÄÀÏ filteringÀ» ÇÏ°í ÀÖ´Ù. ÀÌ µÎ °´Ã¼ÀÇ °ü°è¸¦ º¸¸é ¾Õ¿¡¼­¿Í´Â ´Ù¸£°Ô ListBox°¡ ComboBox¿¡ ÀÇÁ¸¼ºÀ» °¡Áö°í ÀÖ´Ù. À̾߱⸦ ´Ü¼øÈ­ ½ÃÅ°±â À§Çؼ­ ÆÄÀÏ ¿­±â¿¡ ¼ÓÇØ ÀÖ´Â °´Ã¼µé Áß¿¡¼­ À§¿¡¼­ ¾ð±ÞÇÑ °´Ã¼µé¸¸À» °¡Áö°í ±× °ü°è¸¦ Ŭ·¡½º ´ÙÀ̾î±×·¥À¸·Î Ç¥½ÃÇÏ¿© º¸¸é ±×¸² 2¿Í °°Àº ÀÇÁ¸¼ºÀÌ ³ªÅ¸³¯ °ÍÀÌ´Ù(±×¸² 2ÀÇ °¢ °´Ã¼°¡ ´Ü ÇϳªÀÇ Å¬·¡½º·Î µÇ¾î ÀÖ´Ù°í °¡Á¤ÇÑ´Ù).
 

±×¸² 2.  ±×¸² 1ÀÇ ´ÙÀÌ¾Ë·Î±× ¹Ú½º¸¦ ±¸¼ºÇÏ´Â ÁÖ¿ä °´Ã¼ÀÇ ÀÇÁ¸¼º °ü°è

±×¸² 2¸¦ º¸¸é °¢ °´Ã¼ÀÇ ÀÇÁ¸¼ºÀÌ ´«¿¡ ½±°Ô µé¾î¿Â´Ù. ¿©±â¼­ ±×¸² 2¸¦ º¸°í Á» ´ä´äÇÔÀ» ´À²¸¾ß ÇÒ °ÍÀÌ´Ù. À§¿¡¼­ ListBox´Â ¹«·Á ¼¼ °³ÀÇ °´Ã¼¿Í ÀÌ·± Àú·± ÀÇÁ¸¼ºÀ» °¡Áö°í ÀÖ´Ù.  ±×¸² 2ÀÇ µðÀÚÀδë·Î ±×¸² 1ÀÇ ´ÙÀÌ¾Ë·Î±× ¹Ú½º¸¦ ±¸ÇöÇß´Ù°í °¡Á¤ÇØ º¸ÀÚ.  ÀÌ °æ¿ì¿¡ ListBox¸¦ ±¸¼ºÇÏ°í ÀÖ´Â Äڵ忡´Â ListBox°¡ °¡Áö°í ÀÖ´Â °íÀ¯ÀÇ ±â´É, Áï, ÆÄÀϽýºÅÛÀÇ ³»¿ëÀ» º¸¿© ÁÖ´Â ±â´É ¿Ü¿¡ ´Ù¸¥ ¼¼ °³ÀÇ °´Ã¼¿ÍÀÇ ÀÇÁ¸¼º¿¡ µû¸¥ Äڵ尡 µé¾î°¡°Ô µÉ °ÍÀÌ´Ù. ±¸Ã¼ÀûÀ¸·Î À̾߱âÇؼ­, ¡®Ã£´ÂÀ§Ä¡ComboBox¡¯¿Í ¡®ÆÄÀÏÇü½ÄComboBox¡¯ÀÇ »óź¯È­¸¦ °üÂûÇÏ´Â Äڵ尡 µé¾î°¥ °ÍÀÌ°í(Observer ÆÐÅÏ°ú À¯»çÇÑ À̾߱â?),  ¡®ÆÄÀÏÀ̸§ComboBox¡¯¸¦ À§ÇÑ ÀÚ½ÅÀÇ »óÅ º¯È­¸¦ ¾Ë·ÁÁÖ´Â ÀÎÅÍÆäÀ̽º¸¦ À§ÇÑ Äڵ尡 µé¾î°¥ °ÍÀÌ´Ù. Á¤¸»·Î ÀÌ·¸°Ô µðÀÚÀÎÇÏ°í ±¸ÇöÀ» ÇßÀ»±î? Àý´ë·Î ¾Æ´Ï´Ù. ¸¸¾à ÀÌ·¸°Ô ±¸ÇöÀ» Çß´Ù¸é, ÀÌ ¼Ò½º´Â ±×¸² 1À» À§ÇÑ ´ÙÀÌ¾Ë·Î±× ¹Ú½º¿¡¼­¸¸ »ç¿ëÇÒ ¼ö ÀÖ´Â Äڵ尡µÇ¾î ¹ö¸± °ÍÀÌ´Ù. ±×¸² 1°ú °°Àº ´ÙÀÌ¾Ë·Î±× ¹Ú½º°¡ ³Ê¹« Ư¼öÇÑ °æ¿ì¿¡¸¸ »ç¿ëµÇ¾îÁö´Â °´Ã¼¶ó¸é À̾߱Ⱑ Á¶±Ý ´Ù¸£Áö¸¸, ´Ù¸¥ °÷¿¡µµ ¾ÆÁÖ À¯¿ëÇÏ°Ô »ç¿ëµÇ¾î Áú ¼ö ÀÖ´Â ListBox¿Í ComboBox¸¦ À§ÀÇ °¡Á¤´ë·Î °­ÇÑ ÀÇÁ¸¼ºÀ» ÁÖ¾î µðÀÚÀÎÇÏ°í ±¸ÇöÇÑ´Ù´Â °ÍÀº ¹ÌÄ£ÁþÀÌ µÉ °ÍÀÌ´Ù. ±× ÀÌÀ¯´Â Windows ÇÁ·Î±×·¡¹ÖÀ» ÇÑ ¹øÀÌ¶óµµ °ü½É ÀÖ°Ô º» °³¹ßÀÚ¶ó¸é Àß ¾Ë°í ÀÖÀ» °ÍÀÌ´Ù. ¡®Hello World¡¯¶ó´Â ¹®ÀÚ¸¦ Ç¥½ÃÇÏ´Â À©µµ¿ì¸¦ Çϳª ±×¸®´Âµ¥ ÇÊ¿äÇÑ Äڵ尡 °ÅÀÇ 50¶óÀÎ Á¤µµ°¡ ÇÊ¿äÇÏ´Ù´Â °ÍÀ».   

2.  ±×·³ ¾î¶»°Ô ÇÒ °ÍÀΰ¡?

±×·± ¾î¶»°Ô ÇÏ¸é ±×¸² 2¿Í °°Àº ÇÊ¿¬ÀûÀÎ ÀÇÁ¸¼ºÀ» ÃÖ¼ÒÈ­ÇÏ¿©, »ç¿ëµÈ À§Á¬(Widget)ÀÇ Àç»ç¿ë¼ºÀ» ³ôÀÏ ¼ö ÀÖÀ»±î? °¡Àå ½±°Ô »ý°¢ÇÒ ¼ö ÀÖ´Â °ÍÀº ±×¸² 1°ú °°Àº ´ÙÀÌ¾Ë·Î±× ¹Ú½º°¡ ÇØ¾ß µÇ´Â ÇàÀ§¸¦ Çϱâ À§Çؼ­ ÇÊ¿¬ÀûÀÎ ¸Þ½ÃÁö Àü´ÞÀ» ´Ù¸¥ °´Ã¼¿¡ À§ÀÓ(delegation)ÇÏ´Â °ÍÀÌ´Ù. Á» ½±°Ô À̾߱âÇϸé, °¢ °´Ã¼°¡ ÀڽŰú ÀÇÁ¸¼ºÀ» °¡Áö°í ÀÖ´Â °´Ã¼¿¡ Á÷Á¢ ¸Þ½ÃÁö¸¦ Àü´ÞÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó, ÀÌ ÀÏÀ» ´Ù¸¥ °´Ã¼¿¡ ºÎŹÇÏ´Â °ÍÀÌ´Ù. ÀÌ·¸°Ô ÇÔÀ¸·Î½á, °¢ °´Ã¼´Â ¸Þ½ÃÁö Àü´ÞÀ» ´ëÇàÇÏ´Â °´Ã¼ÀÇ ÀÏ°üµÈ ÀÎÅÍÆäÀ̽º¸¸ ±â¾ïÇÏ°í ÀÖÀ¸¸é µÇ°í, ¸Þ½ÃÁö¸¦ Àü´ÞÇÏ´Â ÀÌ ´ëÇà °´Ã¼¸¦ À§ÇÑ µ¿ÀÏÇÑ ÀÎÅÍÆäÀ̽º¸¦ Á¦°øÇÔÀ¸·Î½á, ´Ù¸¥ ¾î¶² °´Ã¼¿¡µµ ÀÇÁ¸¼ºÀ» °¡ÁöÁö ¾Ê´Â °´Ã¼°¡ µÉ ¼ö ÀÖ´Â °ÍÀÌ´Ù. ÀÌ ¹æ¹ýÀ» Á¤¸®ÇÑ °ÍÀÌ ¹Ù·Î Mediator ÆÐÅÏÀÌ´Ù. Á»´õ ±¸Ã¼ÀûÀ¸·Î ±× ÀÌÁ¡À» º¸À̱â À§Çؼ­ ±×¸² 2ÀÇ µðÀÚÀο¡ ÀÌ ¹æ¹ý(Mediator ÆÐÅÏ)À» Àû¿ëÇÏ¿© º¸¾Ò´Ù. ±×¸² 3Àº ±×¸² 2¿¡ Mediator ÆÐÅÏÀ» Àû¿ëÇÏ¿© ´Ù½Ã µðÀÚÀÎÇÑ °ÍÀÌ´Ù.
 

±×¸² 3. ±×¸² 2¿¡ Mediator ÆÐÅÏÀ» Àû¿ëÇÑ Å¬·¡½º ´ÙÀ̾î±×·¥

±×¸² 3¿¡ º¸¸é ListBox¿Í ComboBox µéÀº ±×¸² 2ÀÇ µðÀÚÀÎó·³ ¼­·Î Á÷Á¢ÀûÀ¸·Î ¸Þ½ÃÁö¸¦ Àü´ÞÇÏÁö ¾Ê°í, FileDialogMediator¸¦ ÅëÇÏ´Â °£Á¢ÀûÀÎ ¹æ¹ýÀ» ÅÃÇÏ°í ÀÖ´Ù.  FileDialogMediator´Â ÀÌ µé °´Ã¼µé »çÀÌ¿¡¼­ ¸Þ½ÃÁö Àü´ÞÀ» ´ë½ÅÇØÁÖ´Â ±â´ÉÀ» ÇÏ°í ÀÖ´Ù. À̸¦ À§Çؼ­ FileDialogMediator´Â WidgetÀÌ ÀÚ½ÅÀÇ »óÅ°¡ º¯Çß´Ù´Â °ÍÀ» ¾Ë·ÁÁÙ ¼ö ÀÖ´Â Åë·Î·Î widgetChanged()¶ó´Â À̸§ÀÇ ÀÎÅÍÆäÀ̽º¸¦ Á¦°øÇÏ°í ÀÖ°í, °¢ WidgetÀº FileDialogMediator·Î Widget °íÀ¯ÀÇ ¸Þ½ÃÁö ±³È¯À» À§ÇÑ ÀÎÅÍÆäÀ̽º¸¦ Á¦°øÇÏ°í ÀÖ´Ù.  ±×¸² 3ÀÇ ¿¹¸¦ º¸¸é ComboBox´Â setText() getText()¶ó´Â ÀÎÅÍÆäÀ̽º¸¦ ListBox´Â setTextField()¿Í getTextField()¶ó´Â ÀÎÅÍÆäÀ̽º¸¦ Á¦°øÇÏ°í ÀÖ´Ù. 

±×¸² 3°ú °°ÀÌ µðÀÚÀÎÇÔÀ¸·Î½á, °¢ Widgetµé °£¿¡ Á¸ÀçÇÏ´ø ÀÇÁ¸¼ºÀÌ »ç¶óÁö°í, ±× ÇàÀ§°¡ FileDialogMediator¶ó´Â °´Ã¼¿¡ ÁýÁߵǴ °á°ú¸¦ ÃÊ·¡Çß´Ù. Áï, ¾Õ¿¡¼­ À̾߱âÇÑ´ë·Î ½Ã½ºÅÛÀÇ ÀÇÁ¸¼ºÀº ÁÙÀÌ°í, ÇàÀ§¿¡ ´ëÇؼ­´Â Áö¿ªÈ­¸¦ °¡Á®¿À°Ô µÇ¾ú´Ù. ÀÌ·± °á°ú´Â ÇàÀ§¿¡ º¯È­¸¦ ÁÖ¾î¾ß ÇÒ Çʿ伺ÀÌ ÀÖÀ» ¶§¿¡´Â Mediator ºÎºÐ¸¸ °íÃÄÁÖ¸é µÇ°í ´Ù¸¥ WidgetµéÀº ±×´ë·Î »ç¿ëÇÒ ¼ö ÀÖ°Ô µÇ¾ú´Ù´Â Àǹ̷νá, °á°úÀûÀ¸·Î´ÂWidgetÀÇ Àç»ç¿ë¼ºÀ» ³ôÀÌ°Ô µÇ¾ú´Ù. 

3.  Mediator ÆÐÅÏ

±×¸² 3ÀÇ µðÀÚÀÎÀ» ÀϹÝÈ­ ½ÃÄѼ­ GoFÃ¥ÀÇ ÀúÀÚµéÀÌ Mediator ÆÐÅÏÀ̶õ À̸§À» ºÙ¿©¼­ Á¤¸®ÇÏ¿© ³õ¾Ò´Ù. ±×¸² 4´Â GoF Ã¥ÀÇ Mediator ÆÐÅÏÀ» ÇÊÀÚ°¡ UML·Î ¹Ù²Ù¾î Ç¥ÇöÇÑ °ÍÀ̸ç, ±×¸² 3ÀÇ ¿¹¿Í ºñ±³Çϸé FileDialogMediator¸¦ Mediator·Î WidgetÀ» Colleague·Î ÀϹÝÈ­ µÇ¾î Ç¥ÇöµÇ¾î ÀÖ´Ù.
 

±×¸² 4. Mediator ÆÐÅÏ

¾î¶²°¡? ÇعýÀÌ ³Ê¹« ´Ü¼øÇÏ´Ù°í »ý°¢ÇÏÁö ¾Ê´Â°¡? ÇÏÁö¸¸, ÀÌ·± ´Ü¼øÇÑ ÇعýÀÌ À§¿¡¼­ °í¹ÎÇß´ø Áß¿äÇÑ ¹®Á¦µéÀ» ³Ê¹«µµ ¸Úµå·¯Áö°Ô ÇØ°áÇÒ ¼ö ÀÖ´Ù. Áö±Ý±îÁö ºÁ¿Ô´ø ¸ðµç µðÀÚÀÎ ÆÐÅÏÀÌ ±×·¡¿ÔµíÀÌ¡¦

GoFÃ¥ ÀúÀÚµéÀÌ ¹àÈ÷°í ÀÖ´Â Mediator ÆÐÅÏÀÇ Àǵµ¸¦ Á¤¸®ÇÏ´Â °ÍÀ¸·Î ÀÌ ¹ø ±ÛÀ» ¸¶¹«¸® Áþ°Ú´Ù.
 

Àǵµ(intent)

Define an object that encapsulates how a set of objects interact. Mediator promotes loose coupling by keeping objects from referring to each other explicitly, and it lets you vary their interaction independently.

Mediator ÆÐÅÏÀº ÇÑ ¹«¸®ÀÇ °´Ã¼µé °£ÀÇ »óÈ£ ÀÛ¿ë¿¡ µû¸¥ ÇàÀ§¸¦ Áö¿ªÈ­(localization)½ÃÅ´À¸·Î½á °¢ °´Ã¼µéÀÌ ¸í½ÃÀûÀ¸·Î ÂüÁ¶ÇØ¾ß ÇÏ´Â Çʿ伺À» ¾ø¾ÖÁØ´Ù. °á°úÀûÀ¸·Î ÀÌ ÆÐÅÏÀº °¢ °´Ã¼°£ÀÇ ÀÇÁ¸¼ºÀ» ÁÙ¿©¼­ ±× µé°£ÀÇ ´Ù¾çÇÑ »óÈ£ ÀÛ¿ëÀÌ °¡´ÉÇÏ°Ô ÇØ ÁØ´Ù.

 

4.  °ü·Ã ÆÐÅÏ

ÀÌ ÆÐÅÏÀÇ ÀúÀÚµéÀÌ °ü·ÃÀÌ ÀÖ´Ù°í ¾ð±ÞÇÑ ÆÐÅÏ Áß¿¡´Â ObserverÆÐÅÏÀÌ ÀÖ´Ù.  Áö³­ È£¸¦ ÀÐ¾î º» µ¶ÀÚµéÀº Mediator ÆÐÅÏÀÇ ¾î´À ºÎºÐÀÌ Observer ÆÐÅÏ°ú ºñ½ÁÇÑÁö ÀÌ¹Ì ¾Ë¾ÆÂ÷·ÈÀ» °ÍÀÌ´Ù.  ¾î´À ºÎºÐÀÌ °ü·ÃÀÌ Àִ°¡?  ¹Ù·Î Mediator°¡ ColleagueÀÇ »óÅ º¯È­¸¦ ÁÖ½ÃÇÏ´Â ºÎºÐÀÌ´Ù. ±× ´ÙÀ½ °ü°è°¡ ÀÖ´Ù°í À̾߱âÇÑ ÆÐÅÏÀ¸·Î´Â Fa?ade ÆÐÅÏ[1]ÀÌ ÀÖ´Ù.

5.  ¸ÎÀ½¸»

GoFÃ¥¿¡ ¼Ò°³µÇ¾î ÀÖ´Â µðÀÚÀÎ ÆÐÅÏÀº º¸¸é º¼¼ö·Ï ½Å±âÇÏ´Ù´Â »ý°¢ÀÌ µç´Ù. ±× ÆÐÅϵéÀ» º¸¸é Çϳª°°ÀÌ ±× ±¸Á¶°¡ Âü ´Ü¼øÇÏ´Ù´Â °ÍÀ» ½±°Ô È®ÀÎÇÒ ¼ö Àִµ¥, ³î¶ó¿î »ç½ÇÀº ÀÌ ´Ü¼øÇÑ ÇعýÀÌ ¿ì¸®ÀÇ ÁÖº¯¿¡ ÀÖ´Â º¹ÀâÇÑ(?) ¼ÒÇÁÆ®¿þ¾î ½Ã½ºÅÛÀÇ ÀϹÝÀûÀÎ ÇعýµéÀ̶ó´Â °ÍÀÌ´Ù. ÇÊÀÚ°¡ ÀÌ »ç½Ç¿¡ ³²´Ù¸£°Ô ³î¶ó´Â ÀÌÀ¯°¡ ÀÖ´Ù. ÇÊÀÚ´Â ´ëÇп¡¼­ ¡®Àü»êÇС¯ÀÌ ¾Æ´Ñ ¡®¹°¸®ÇС¯À» Àü°øÇߴµ¥, ±× ºÐ¾ß¿¡¼­µµ ¡®´Ü¼ø¼º¡¯Àº ¾ÆÁÖ Áß¿äÇÏ°Ô Ãë±ÞµÇ°í ÀÖ´Â °³³äÀ̱⠶§¹®ÀÌ´Ù. ÀÚ¿¬À» ÀÌÇØÇϴµ¥ ÇعýÀÌ º¹ÀâÇÏ°Ô ³ª¿À¸é ¾îµò°¡¿¡¼­ ÀÚ½ÅÀÌ À߸øµÇ¾ú´Ù°í »ý°¢ÇØ ºÁ¾ß ÇÑ´Ù´Â »ý°¢Àº ÀÌ ºÐ¾ß¿¡¼­ °ÅÀÇ Àý´ëÀûÀÌ´Ù. ÀÌ·± °üÁ¡¿¡¼­ »ý°¢ÇØ º¸¸é, ÀÚ¿¬ÀÌ ´Ü¼ø¼º¿¡ ±â¹ÝÇÏ¿© ¿îÇàµÇ°í ÀÖ°í, µû¶ó¼­, Àΰ£ÀÇ ¸ðµç ÀÛ¿ëµµ ±×·¯ÇÒ ¼ö ¹Û¿¡ ¾øÀ¸¸ç °á°úÀûÀ¸·Î µðÀÚÀÎ ÆÐÅÏÀ¸·Î Á¤¸®µÈ ¿©·¯ ¹®Á¦µéÀÇ Çعýµéµµ ´Ü¼øÇÑ °ÍÀÌ ´ç¿¬ÇÑ °á°ú°¡ ¾Æ´Ò±î? ³Ê¹« Áö³ªÄ£ ºñ¾àÀΰ¡? ^(^

´ÙÀ½ È£ÀÇ ÁÖÁ¦°Å¸®·Î ¶Ç ´Ù¸¥ Èï¹Ì·Î¿î ²¨¸®¸¦ ã¾ÆºÁ¾ß °Ú´Ù. 
 

Âü°í ¹®Çå

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

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


 oonewsletter - 2000/9/2