µðÀÚÀÎ ÆÐÅÏ(9) - ´õ ÁÁÀº ÀÎÅÍÆäÀ̽º¸¦ À§ÇÏ¿©..
À̽ÂÀÏ
|
Áö³ È£¿¡ Composite[1] ÆÐÅÏÀ» ÀÎÅÍÆäÀ̽º(Interface)¶ó´Â ÁÖÁ¦¿Í ¿¬°ü Áö¾î¼ »ý°¢ÇØ º¸¾Ò´Ù. À̾߱Ⱑ ÁøÇàµÇ·Á´Ù ¸¸ °æÇâÀÌ ÀÖ¾î¼ À̹ø È£¿¡¼´Â VisitorÆÐÅÏ[1]À̶ó´Â °ÍÀ» °¡Áö°í Áö³È£ÀÇ 2ºÎÂë µÇ´Â À̾߱⸦ ÇØ º¸·Á ÇÑ´Ù. Áö³ È£ÀÇ À̾߱⠿¬°á... Áö³ È£ÀÇ CompositeÆÐÅÏ¿¡¼ methodµéÀ» composite¿¡ ÁÖ´Â °Í°ú component¿¡ µÎ´Â °Í°úÀÇ Â÷ÀÌ¿¡¼ ¹ß»ýÇÏ´Â ¹®Á¦¸¦ Åõ¸í¼º(transparency)°ú ¾ÈÀü¼º(safety)¿¡ ´ëÇÑ °üÁ¡¿¡¼ ¼·ÎÀÇ Àå´ÜÁ¡À» »ý°¢ÇØ º¸¾Ò´Ù. µ¶ÀÚµéÀº ÀúÀÚÀÇ À̾߱â ÁøÇàÀ» ¾î¶»°Ô »ý°¢ÇØ º¸¾Ò´ÂÁö ¸ð¸£°Ú´Ù. Áö³ È£¿¡¼ ´Ù·ç¾ú´ø µÎ °¡Áö °üÁ¡À» Á»´õ ÀÚ¼¼È÷ »ìÆ캸¸é, ´Ù¸¥ Èï¹Ì·Î¿î ÀÌ¾ß±æ °Å¸®¸¦ ãÀ» ¼ö ÀÖ´Ù. ¸ÕÀú, Åõ¸í¼º¿¡ ´ëÇؼ º¸ÀÚ. ÄÄÇ»ÅÍ ½Ã½ºÅÛ µðÀÚÀÌ³Ê ¶Ç´Â ÇÁ·Î±×·¡¹ÖÀ» °øºÎÇß´ø µ¶ÀÚµéÀº º¸¾Æ¿Ô´ø ¸¹Àº Ã¥¿¡¼ Åõ¸í¼º¿¡ ´ëÇؼ À̾߱âÇÏ°í ÀÖ´Â °ÍÀ» ¹ß°ßÇßÀ» °ÍÀÌ´Ù. ¾î¶² ¸ðµâÀÌ ¿ÜºÎ¿¡ ÀÎÅÍÆäÀ̽º¸¦ Á¦°øÇÑ´Ù´Â °ÍÀº ¹«¾ùÀ» ÀǹÌÇϴ°¡? ÀÌ°ÍÀº ÇØ´ç ¸ðµâÀÇ ³»ºÎ ¼Ó»çÁ¤À» µÇµµ·ÏÀÌ¸é ¼û±â·Á´Â ³ë·ÂÀÇ ÀÏȯÀ̶ó°í »ý°¢ÇÒ ¼ö ÀÖ´Ù. °´Ã¼ÁöÇâ °üÁ¡¿¡¼´Â ÀÌ°ÍÀ» ´Ù¸¥ ¿ë¾î·Î ¡®information hiding¡¯À̶ó°í À̾߱âµÇ¾î Áö±âµµ ÇÑ´Ù. ±×¸®°í, information hidingÀÇ Á» ´õ ±¸Ã¼ÀûÀÎ ¹æ¹ýÀº encapsulation°ú abstractionÀ̶ó°í À̾߱⸦ ÇÏ¸é¼ ¿ì¸®µéÀÇ ¸Ó¸®¼ÓÀ» ¾îÁö·´°Ô ¸¸µç´Ù. encapsulationÀÌ ÀßµÈ ¸ðµâÀº ¿ÜºÎÀÇ Å¬¶óÀ̾ðÆ®¿¡°Ô ÃÖ¼ÒÇÑÀÇ ÀÎÅÍÆäÀ̽º¸¸À» Á¦°øÇÏ¸é¼ ³»ºÎÀÇ ¼Ó»çÁ¤À» °¡´ÉÇÑ ¾Ë ¼ö ¾ø°Ô ÇÔÀ¸·Î½á Ŭ¶óÀ̾ðÆ®¿ÍÀÇ °ü°è¸¦ ÃÖ¼ÒÈ ½ÃÅ°°í, °á±¹ Àß µðÀÚÀÎµÈ ¸ðµâÀ̶ó´Â ¼Ò¸®¸¦ µè´Â´Ù. ¸¹Àº ¹®¼¿¡¼ ¾ð±ÞÇϱ⠶§¹®¿¡ Àͼ÷ÇÏÁö¸¸ ÀÌÇØÇϱ⠽±Áö ¾ÊÀº ¿ë¾î·Î´Â À̸¦ ¡®low coupling¡¯À» ½ÇÇö½ÃÅ°°í ÀÖ´Â ¸ðµâÀ̶ó°í ºÒ¸°´Ù. AbstractionÀÌ ÀǹÌÇÏ´Â °Íµµ encapsulation°ú Àǹ̻óÀ¸·Î °ÅÀÇ ºñ½ÁÇÏ°Ô ÀÌÇصǾî Áö°í ÀÖ´Ù[2]. EncapsulationÀÌ °Á¦ÀûÀ¸·Î ³»ºÎÀÇ ¼Ó»çÁ¤À» Ŭ¶óÀ̾ðÆ®°¡ º¼ ¼ö ¾ø°Ô ¸¸µå´Â °ÍÀ̶ó¸é, abstractionÀº ÀÚ¿¬½º·´°Ô ÀÌ·¯ÇÑ ¸ñÀûÀ» ÀÌ·ç´Â °ÍÀÌ¶ó º¼ ¼ö ÀÖÀ» °Í °°´Ù. ¹æ¹ýÀº ÇØ´ç ¸ðµâÀÌ °¡Áö´Â Àǹ̸¦ ¾ÆÁÖ Àß(?) ÀÎÅÍÆäÀ̽º·Î Ãß»óÈ ½ÃÅ´À¸·Î½á Ŭ¶óÀ̾ðÆ®°¡ ÇØ´ç ¸ðµâ¿¡¼ Á¦°øÇÏ´Â ÀÎÅÍÆäÀ̽º ¿Ü¿¡ ´Ù¸¥ Á¤º¸¸¦ ¾Ë ÇÊ¿ä°¡ ¾ø°Ô ¸¸µå´Â °ÍÀÌ´Ù. Encapsulation¿¡¼¿Í ¸¶Âù°¡Áö·Î Àß ¾Ë·ÁÁø ¿ë¾î·Î ÀÌ·± ¸ñÀûÀ» ´Þ¼ºÇÑ ¸ðµâÀ» ¡®high cohesion¡¯µÇ¾ú´Ù°í Çϸç, »ó´çÈ÷ µðÀÚÀÎÀÌ Àß µÈ ¸ðµâ·Î Ī¼Û(?)À» ÇÑ´Ù. Á¤¸®Çϸé, ÁÁÀº ½Ã½ºÅÛÀº low coupling°ú high cohesionÀ¸·Î ¹«ÀåµÇ¾î ¿ÜºÎ¿¡ Àǹ̸¦ Àß µå·¯³½ °£°áÇÑ ÀÎÅÍÆäÀ̽º¸¦ Á¦°øÇÏ´Â ¸ðµâµé·Î ÀÌ·ç¾îÁø °ÍÀ̶ó°í ¸¹À̵é ÀÌÇØÇÏ°í ÀÖ´Â °Í °°´Ù[2]. »ç½Ç Áö±Ý±îÁöÀÇ À̾߱Ⱑ ³Ê¹« Ãß»óÀûÀÌ´Ù. µµ´ëü ¾î¶»°Ô Çϸé encapsulation°ú abstractionÀÌ ÁÁÀº ¸ðµâÀ» ¼³°èÇÒ ¼ö ÀÖ´Â °ÍÀϱî? ÇÊÀÚÀÇ »ý°¢À¸·Î´Â À̸¦ À§ÇÑ ¾î¶² ¸íÈ®ÇÑ °ø½Ä°ú °°Àº ¹æ¹ý·ÐÀÌ ÀÖ´Â °ÍÀº ¾Æ´Ï°í, ¸¹Àº ½Ã½ºÅÛ µðÀÚÀÎ °æÇ踸ÀÌ ÀÖÀ» »ÓÀÌ´Ù¶ó°í »ý°¢ÇÑ´Ù. ¿Ö³ÄÇϸé, ÃÖÀûÀÇ ÀÎÅÍÆäÀ̽º¶ó´Â °ÍÀº »óȲ¿¡ µû¶ó¼ ´Þ¶óÁö±â ¶§¹®ÀÌ´Ù. ÀÌ·± Àǹ̿¡¼, µðÀÚÀÎÆÐÅÏÀº °æÇè ¸¹Àº ´Ù±¹Àû ¼±¹èµéÀÇ ³ëÇÏ¿ì°¡ ½×ÀÎ µðÀÚÀÎ ÇØ´äÀ̱⠶§¹®¿¡ ÈǸ¢ÇÑ ÀÚ¿øÀÌ µÉ ¼ö ÀÖ´Ù. ´Ù½Ã ¸»Çϸé, ¾î¶² ¹®Á¦°¡ ÀÌ·± »óȲ¿¡¼´Â ÀÌ·¸°Ô ÇØ°áµÇ´Â °ÍÀÌ ÃÖ¼±ÀÌ µÉ ¼ö ÀÖ´Ù¶ó´Â °ËÁõµÈ µðÀÚÀÎÀ¸·Î º¼ ¼ö Àֱ⠶§¹®ÀÌ´Ù. ¾î¶»°Ô ÇÒ±î? Áö³ È£¿¡ composite ÆÐÅÏÀ» ÀÌ¿ëÇؼ °£´ÜÇÏ°Ô µðÀÚÀÎ Çß´ø ÆÄÀÏ ½Ã½ºÅÛÀ» ´Ù½Ã »ó±â½ÃÄѺ¸ÀÚ[±×¸² 1]. Áö³ È£¿¡ µðÀÚÀÎ Çß´ø ÆÄÀÏ ½Ã½ºÅÛ¿¡¼ ¿ÜºÎ¿¡ Á¦°øÇÏ°í ÀÖ´Â ÀÎÅÍÆäÀ̽º¸¦ °¡Áö°í ÇÒ ¼ö ÀÖ´Â ÀÏÀº »õ·Î¿î µð·ºÅ丮³ª ÆÄÀÏ Ã·°¡, »èÁ¦¿Í NodeÀÇ À̸§ º¸±â¸¦ ÇÒ ¼ö ÀÖ´Ù. µû¶ó¼, ÀÌ ÆÄÀÏ ½Ã½ºÅÛ¿¡¼ Á¦°øµÇ´Â ÀÎÅÍÆäÀ̽º¸¦ ÀÌ¿ëÇϸé ÆÄÀÏ ½Ã½ºÅÛ¿¡ µé¾îÀÖ´Â ÆÄÀÏ°ú µð·ºÅ丮ÀÇ À̸§º¸±âÀÇ °£´ÜÇÑ ls¿Í °°Àº ÀÀ¿ëÇÁ·Î±×·¥À» ¸¸µé ¼ö ÀÖ´Ù. ³Ê¹« °£´ÜÇÏ´Ù ½Í¾î¼, µð·ºÅ丮´Â À̸§ µÚ¿¡ ¡°/¡±°¡ Ç¥½ÃµÉ ¼ö ÀÖµµ·Ï ÇÏ°í ½Í´Ù´Â »ý°¢À» Çß´Ù°í °¡Á¤ÇØ º¸ÀÚ. ¾î¶»°Ô ÇØ¾ß ÇÒ±î? ±×¸² 1. Composite ÆÐÅÏÀ» Àû¿ëÇÑ ÆÄÀÏ ½Ã½ºÅÛ µðÀÚÀÎ ÆÄÀÏÀº ±×´ë·Î À̸§À» Ãâ·ÂÇÏ°í µð·ºÅ丮´Â À̸§ µÚ¿¡ ¡°/¡±°¡ Ãâ·ÂµÇ¾î¾ß ÇÏ´Â ¹®Á¦´Â ÇØ´ç nodeÀÇ Å¸ÀÔ¿¡ µû¶ó¼ ´Þ¶óÁö°Ô µÈ´Ù. °¡Àå ½±°Ô »ý°¢ÇÒ ¼ö ÀÖ´Â µðÀÚÀÎ ¹æ¹ýÀº File node¿Í Directory nodeÀÇ getName()À» ¼·Î ´Ù¸£°Ô ±¸ÇöÇÏ´Â °ÍÀÌ´Ù. ³Ê¹« °£´ÜÇÑ°¡? ¿©±â¼ ¿ì¸®°¡ ÁÖÀÇ ±í°Ô ºÁ¾ß ÇÒ »çÇ×ÀÌ ÀÖ´Ù. ÀÌ ¹æ¹ýÀº ±âÁ¸ÀÇ ÆÄÀÏ ½Ã½ºÅÛÀÇ nodeµéÀÇ method¸¦ ¼öÁ¤ÇÏ°í »õ·Ó°Ô ÄÄÆÄÀÏÇÏ´Â °úÁ¤À» °ÅÄ¡°Ô µÈ´Ù. ¿¹Á¦°¡ ±âÁ¸¿¡ Á¸ÀçÇÏ´Â ÀÎÅÍÆäÀ̽ºÀÇ ±¸ÇöÀ» ¼·Î ´Ù¸£°Ô ÇÏ´Â °ÍÀ¸·Î ³¡³ª´Â ¾ÆÁÖ °£´ÜÇÑ °ÍÀÌ¾î¼ ±×·¸Áö, ¾Æ¿¹ »õ·Î¿î operationÀ» µµÀÔÇØ¾ß ÇÏ´Â ¹®Á¦¿¡ ´ç¸éÇßÀ» °æ¿ì¿¡´Â ±×¸® °£´ÜÇÏÁö ¾Ê´Ù. Áö³ È£¿¡¼ °í¹Î¿¡ ºüÁ³´ø ¹®Á¦°¡ ´Ù½Ã ´ëµÎµÇ´Â °ÍÀÌ´Ù. »õ·Î¿î ±â´ÉÀ» ÀÎÅÍÆäÀ̽ºÀÇ operationÀ¸·Î Ãß°¡ÇÒ °ÍÀΰ¡ ¾Æ´Ï¸é °¢ nodeÀÇ Å¸ÀÔÀÇ method·Î¸¸ µÑ °ÍÀΰ¡ ÇÏ´Â ¹®Á¦·Î ¸»ÀÌ´Ù. ÆÄÀÏ ½Ã½ºÅÛ¿¡ »õ·Î¿î ±â´ÉÀ» Ãß°¡ÇÒ ¶§¸¶´Ù ÀÌ·± °í¹ÎÀ» ÇÏ´Â °Íµµ Èûµç ÀÏÀε¥, Ãß°¡µÇ´Â ±â´ÉÀ» À§ÇÑ ÀÎÅÍÆäÀ̽ºÀÇ operationÀÇ Áõ°¡·Î Àüü ÆÄÀÏ ½Ã½ºÅÛÀÇ encapsulation°ú abstractionÀÌ ¶³¾îÁ®¼ ³ªÁß¿¡´Â µµÀúÈ÷ °¨´çÇÒ ¼ö ¾øÀ» Á¤µµ·Î ÆÄÀϽýºÅÛÀÌ º¹ÀâÇØÁ®¼ ÀÎÅÍÆäÀ̽º¶ó´Â Àǹ̰¡ ¹«»öÇØ Áú °ÍÀÌ´Ù. µû¶ó¼, ÆÄÀÏ ½Ã½ºÅÛÀÇ ±â´É È®À强À» À§Çؼ´Â ±âÁ¸ÀÇ ÆÄÀÏ ½Ã½ºÅÛÀ» ±¸¼ºÇÏ´Â node ±¸Á¶¸¦ ¼öÁ¤ÇÏ´Â ÀÌ¿Í °°Àº ¹æ¹ýÀº ±×¸® ¹Ù¶÷Á÷ÇÏÁö ¾Ê´Ù. Node¸¦ À§ÇÑ ÀÎÅÍÆäÀ̽ºÀÇ operationÀº °¡Àå ±âº»ÀûÀÎ ÃÖ¼ÒÇÑÀÇ °Í¸¸À» À¯ÁöÇÏ¸é¼ node¿¡ »õ·Î¿î operationÀ» °¡ÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀ» ¸ð»öÇØ¾ß ÇÒ °ÍÀÌ´Ù.
void ls(Node n_) { if(n_
instanceof File)
{ } ¼Ò½º 1. ls ±¸Çö #1 ±×·³ ÀÌ·± ¹®Á¦Á¡À» ¾î´À Á¤µµ ±Øº¹ÇÒ ¼ö ÀÖ´Â ´Ù¸¥ µðÀÚÀÎ ¹æ¹ýÀº ¾ø³ª? Visitor ÆÐÅÏ Visitor ÆÐÅÏÀÌ ±× ÇÑ°¡Áö ÇØ´äÀÌ µÉ ¼ö ÀÖ´Ù. Visitor ÆÐÅÏÀÌ ¾î¶² °ÍÀÎÁö¿¡ ´ëÇÑ ÀϹÝÀûÀÎ À̾߱â´Â ³ªÁß¿¡ Çϱâ·Î ÇÏ°í, ÀÏ´Ü ´ÙÀ½ÀÇ ³»¿ëÀ» Àо±â ¹Ù¶õ´Ù. Node¿¡ »õ·Î¿î operationÀÎ accept(Visitor v)¸¦ ÷°¡ÇÑ´Ù. ±×¸®°í ³ ÈÄ¿¡ ´ÙÀ½°ú °°Àº Visitor Ŭ·¡½º¸¦ Á¤ÀÇÇÑ´Ù.
class Visitor { void
visit(File file_)
{ void visit(Directory dir_) { System.out.println(dir_.getName()
+
"/"); ¼Ò½º2. Visitor class ±×¸®°í, Node¿¡ »õ·Î ÷°¡µÈ accept operation¿¡ ´ëÇÑ File°ú Directory ÀÇ ±¸ÇöºÎ´Â ´ÙÀ½°ú °°ÀÌ ÇÑ´Ù. class File extends Node
{ class Directory extends Node
{ ¼Ò½º3. accept methodÀÇ ±¸ÇöºÎ ÀÌÁ¦ Àç·á(?)´Â ¸ðµÎ Áغñ µÆ´Ù. Node¿¡ »õ·Î ÷°¡µÈ operationÀÎ accept¿Í »õ·Î Á¤ÀÇÇÑ Visitor Ŭ·¡½º¸¦ °¡Áö°í ¼Ò½º 1°ú °°Àº ±â´ÉÀ» °¡Áö´Â Ŭ¶óÀ̾ðÆ®ÀÇ method¸¦ ±¸ÇöÇÏ¸é ´ÙÀ½°ú °°ÀÌ µÈ´Ù. void ls(Node n_)
{ ¼Ò½º 4. ls ±¸Çö #2 ÀÌÁ¦ ¼Ò½º1°ú ¼Ò½º4¸¦ ºñ±³ÇØ º¸ÀÚ. ¼Ò½º1°ú´Â ´Þ¸® ¼Ò½º4¿¡¼´Â Ŭ¶óÀ̾ðÆ®¿¡¼ Ãâ·ÂÇÏ·Á´Â ÇØ´ç nodeÀÇ Å¸ÀÔÀ» ±¸º°ÇÏ´Â °úÁ¤À» º¼ ¼ö ¾ø´Ù. ´ë½Å¿¡ »õ·ÎÀÌ Ãß°¡µÈ accept operationÀ» Visitor ÀνºÅϽºÀÇ reference¸¸À» ÀÎÀÚ·Î ÇÏ¿© È£ÃâÇÏ´Â °ÍÀÌ ÀüºÎÀÌ´Ù. accept operationÀÇ È£ÃâÀº °á°úÀûÀ¸·Î childÀÇ Å¸ÀÔ¿¡ µû¶ó¼ ÀÚµ¿À¸·Î ¼Ò½º 3¿¡¼ Á¤ÀÇµÈ °Íó·³ ÀÚ½ÅÀ» reference¸¦ ÀÎÀÚ·Î Çؼ Visitor ÀνºÅϽºÀÇ visit ¸Þ¼Òµå°¡ È£ÃâµÈ´Ù. ±×·¯¸é ¼Ò½º 2¿¡¼Ã³·³ Visitor ÀνºÅϽºÀÇ´Â call backÀ¸·Î½á ÇØ´ç node ŸÀÔ¿¡ µû¶ógetNameÀ» È£ÃâÇÏ¿©, °á°úÀûÀ¸·Î´Â ¼Ò½º 1ó·³ nodeÀÇ Å¸ÀÔ °Ë»ç¸¦ Ŭ¶óÀ̾ðÆ®¿¡¼ ÇÏÁö ¾Ê°íµµ °°Àº °á°ú¸¦ ¾ò°Ô µÈ´Ù. visit(File file_)°¡ È£Ãâ‰çÀ» °æ¿ì¸¦ interaction ´ÙÀ̾î±×·¥À¸·Î ³ªÅ¸³»¸é ´ÙÀ½ÀÇ sequence diagram °ú °°´Ù. ±×¸² 2. Visitor ÆÐÅÏÀÇ sequence ´ÙÀ̾î±×·¥ ÀÌÁ¦ Á¤¸®¸¦ ÇØ º¸ÀÚ. ÆÄÀÏ ½Ã½ºÅÛ¿¡ »õ·Î¿î ±â´ÉÀ» º¸°Çϱâ À§ÇÏ¿© accept¶ó´Â »õ·Î¿î operationÀ» Node¿¡ Ãß°¡Çϱâ´Â ÇßÁö¸¸, ¼Ò½º 2¿¡¼Ã³·³ ½ÇÁúÀûÀÎ ÇàÀ§´Â VisitorÀÇ visitÀ̶ó´Â ¸Þ¼Òµå¿¡°Ô À§ÀӵǾî ÀÖ´Ù. Áï, Ŭ¶óÀ̾ðÆ®´Â NodeÀÇ Å¸ÀÔ¿¡ µû¶ó¼ ´Ù¸¥ Çü½ÄÀ¸·Î Ãâ·ÂÇϴ åÀÓÀ» °¡Áö´Â °´Ã¼¸¦ Visitor¶ó´Â À̸§À¸·Î »õ·Î ¸¸µé°í, ÀÌ °´Ã¼¸¦ Àüü ÆÄÀϽýºÅÛÀ» ±¸¼ºÇÏ´Â °¢ node¿¡ acceptÀÇ ÀÎÀÚ·Î ³Ñ°ÜÁÖ°í, °¢ node´Â call back Çü½ÄÀ¸·Î Visitor°¡ °¢ nodeÀÇ À̸§À» ÇØ´ç nodeÀÌ Å¸ÀÔ¿¡ µû¶ó¼ Ãâ·ÂÇÏ°Ô µÇ¾î ÀÖ´Â ±¸Á¶´Ù. °á°úÀûÀ¸·Î´Â node ŸÀÔ¿¡ µû¸¥ À̸§ Ãâ·Â¿¡ ´ëÇÑ Ã¥ÀÓÀÌ Node ÀÚüµµ ¾Æ´Ï°í, Node¸¦ »ç¿ëÇϴ Ŭ¶óÀ̾ðÆ®µµ ¾Æ´Ñ, Á¦ »ïÀÇ Visitor¶ó´Â °´Ã¼°¡ °¡Áö´Â ±¸Á¶¸¦ ¶ç°í ÀÖ´Ù. ÀÌ ±¸Á¶¸¦ Á»´õ ÀϹÝÈ ½ÃÅ°¸é ´ÙÀ½ÀÇ Å¬·¡½º ´ÙÀ̾î±×·¥°ú °°ÀÌ Ç¥ÇöµÉ ¼ö ÀÖ´Ù.
±×¸² 3. ÀϹÝÈµÈ Visitor ÆÐÅÏÀÇ È°¿ë ±¸Á¶ ls¸¦ À§ÇÑ ¸Þ¼Òµå¿Ü¿¡µµ ÆÄÀϽýºÅÛ¿¡ ´ëÇÑ À¯¿ëÇÑ ÀÀ¿ëÇÁ·Î±×·¥À¸·Î´Â Unix ½Ã½ºÅÛÀÇ cat°ú °°Àº °ÍÀ» ¿¹·Î º¼ ¼ö ÀÖ´Ù. catÀÇ °æ¿ì¿¡´Â ÇØ´ç node°¡ FileÀÎ °æ¿ì¿¡´Â file ³»¿ëÀ» Ãâ·ÂÇÏ°í directoryÀÎ °æ¿ì¿¡´Â ¿À·ù ¸Þ¼¼Áö¸¦ ȸ鿡 Ãâ·ÂÇÏ´Â ±â´ÉÀ» °®Ãß¾î¾ß ÇÑ´Ù. ÀÌ °æ¿ì¿¡µµ lsÀÇ °æ¿ì¿Í ¸¶Âù°¡Áö·Î NodeÀÇ encapsulation°ú abstractionÀ» ÃÖÀûÀÇ »óÅ·ΠÀ¯ÁöÇÏ°í, Ŭ¶óÀ̾ðÆ®ÀÇ ºÎ´ãÀ» ´ú¾îÁÖ±â À§ÇÏ¿© ÀÌ·¯ÇÑ ±â´ÉÀ» °¡Áö´ÂVisitor °´Ã¼¸¦ ¸¸µé¾î »ç¿ëÇÏ´Â °ÍÀ» °í·ÁÇØ º¼ ¼ö ÀÖ´Ù. ls¿Í cat ÀÌ¿Ü¿¡µµ ÆÄÀϽýºÅÛÀ» ±¸¼ºÇÏ´Â °¢ nodeÀÇ Å¸ÀÔ¿¡ µû¶ó¼ °°Àº operation¿¡ ´ëÇؼ ´Ù¸¥ ÇàÀ§¸¦ ÇØ¾ß ÇÏ´Â operationµéÀ» »ý°¢ÇÒ ¼ö ÀÖ´Ù. ÀÌ·± °æ¿ì¸¦ °í·ÁÇÏ¿© ±×¸² 3¿¡¼Ã³·³ Visitor ÀÎÅÍÆäÀ̽º¸¦ µÎ°í, ½ÇÁúÀûÀÎ operation¿¡ ´ëÇÑ ÇàÀ§¸¦ ±¸ÇöÇϴ Ŭ·¡½ºµéÀÌ Visitor ÀÎÅÍ ÆäÀ̽º¸¦ implementÇϵµ·Ï ÇÑ´Ù. ÀÌ·± ±¸Á¶·Î µðÀÚÀÎÇϸé, Ŭ¶óÀ̾ðÆ®´Â Node¸¦ ¼öÁ¤ÇÏÁö ¾Ê°íµµ Node¿¡ ´ëÇÑ »õ·Î¿î operationÀ» ¹«ÇÑÈ÷(?) ¸¸µé¾î »ç¿ëÇÒ ¼ö ÀÖ°Ô µÈ´Ù.
±×¸² 4. Visitor ÆÐÅÏ
Àǵµ(Intent) Represent an operation to be performed on the elements of an object structure. Visitor lets you define a new operation without changing the classes of the elements on which it operates. Visitor ÆÐÅÏÀº °´Ã¼ ±¸Á¶Ã¼ÀÇ element¿¡ ¿¬»êÀ» °¡ÇÏ´Â »õ·Î¿î operationÀ» ÇØ´ç elementÀÇ Å¬·¡½º¿¡ ¼öÁ¤À» °¡ÇÏÁö ¾ÊÀº »óÅ·ΠÃß°¡ÇÒ ¼ö ÀÖ°Ô ÇØ ÁØ´Ù.
°ü·Ã ÆÐÅÏ ÀÌ ÆÐÅÏ°ú °ü·ÃÀÌ ÀÖ´Ù°í ÀúÀÚµéÀÌ À̾߱âÇϱâ·Î´Â Composite¿Í Interpreter ÆÐÅÏÀÌ ÀÖ´Ù. ÀÌ ¹øÈ£¿¡¼´Â Visitor ÆÐÅÏÀ» Composite ÆÐÅÏ°ú ¿¬°üÁö¾î¼ À̾߱⸦ ÇØ º¸¾Ò°í, ´ÙÀ½¿¡ ±âȸ°¡ µÇ¸é Interpreter¿Í ¿¬°üÁö¾î¼ À̾߱⸦ ÇØ º¸°Ú´Ù. ¸ÎÀ½¸» Encapsulation°ú AbstractionÀÌ ÁÁÀº °´Ã¼ÁöÇ⠽ýºÅÛÀ» µðÀÚÀÎ Çϱâ´Â Âü ¾î·Á¿î ÀÏÀÌ ¾Æ´Ò ¼ö ¾ø´Ù. °´Ã¼ÁöÇâ ÇÁ·Î±×·¡¹Ö ¾ð¾î¸¦ ¸¶½ºÅÍ Çß´Ù°í Çؼ ÇÒ ¼ö ÀÖ´Â Àϵµ ¾Æ´Ï°í, ±×¾ß¸»·Î ¸¹Àº °í¹ÎÀ» ÅëÇؼ ¾ò¾îÁö´Â °æÇèÀÇ »ê¹°ÀÌ¶ó º¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù. µðÀÚÀÎ ÆÐÅÏÀ» Àß °øºÎÇغ¸¸é, ¸í½ÃÀûÀ¸·Î Àß µå·¯³ª ÀÖÁö´Â ¾ÊÁö¸¸, Encapsulation°ú AbstractionÀÌ ÁÁÀº °´Ã¼ÁöÇ⠽ýºÅÛÀ» µðÀÚÀÎ ÇϱâÀ§Çؼ ³ë·ÂÇÑ ¼±¹èµéÀÇ ±ÍÁßÇÑ °æÇèÀ» °øÂ¥·Î ¾òÀ» ¼ö ÀÖÀ» °ÍÀÌ´Ù. GoFÃ¥ÀÇ ³»¿ë¸¸ ´ëÃæ º¸Áö ¸»°í, Á÷Á¢ ÀÚ½ÅÀÌ ÇÏ°í ÀÖ´Â ÀÏ¿¡ µðÀÚÀÎ ÆÐÅÏÀ» »ç¿ëÇØ º¸±â ¹Ù¶õ´Ù. Âü°í ¹®Çå [1] Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, Design Patterns, Elements of Resuable Object-Oriented Software, Addison-Wesley, 1995. [2] Perdita Stevens, Using UML, Updated Edition, Addison-Wesley, 2000. [3] John Vlissides, Pattern Hatching: Design Patterns Applied, Addison-Wesley, 1998.
(±Û Èıâ) Âü ¿À·£ ¸¸¿¡ ±ÛÀ» ½á º¾´Ï´Ù. Á¦°¡ ¾´ ±ÛÀ» ²Ä²ÄÈ÷ Àо½Ã°í ´õ ÁÁÀº ¾ÆÀ̵ð¾î¸¦ Áֽô ºÐµéµµ °è½Ã°í, Àß ¸øµÈ °÷À» Áý¾î Áֽô ºÐµéµµ °è½Ê´Ï´Ù. Á¦°¡ Á» °ÔÀ»·¯¼ »¡¸®»¡¸® ±× ³»¿ëµéÀ» ¼ö·ÅÇÏÁö ¸øÇÑ Á¡ÀÌ ÀÖÁö¸¸, ¾ÕÀ¸·Îµµ Á¦ ±ÛÀÇ ³»¿ë¿¡ ´ëÇÑ ÁÁÀº ÁöÀû ºÎŹµå¸³´Ï´Ù. ^(^
|
|