µðÀÚÀÎ ÆÐÅÏ(1) - "µðÀÚÀÎ ÆÐÅÏ"¼ÓÀ¸·Î


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



"´« À§ÀÇ ¹ßÀÚ±¹À» ã¾Æ¼­ ±× À§¿¡´Ù Àεµ¸¦ ¸¸µé±â"
" Looking for footprint in the snow and putting the pavement there"
- Brian Foote[2] -

¢º µé¾î°¡´Â ±Û

°´Ã¼ÁöÇâ Æз¯´ÙÀÓ(object-oriented paradigm)ÀÌ ÁÙ ¼ö ÀÖ´Â °¡Àå Å« ÀÌÁ¡Àº ¹«¾ùÀϱî? ±×°ÍÀº ¾Æ¸¶µµ  ´ÙÇü¼º(polymorphism)À» ÅëÇÑ Àç»ç¿ë¼º(reusablility)ÀÏ °ÍÀÌ´Ù. »õ·Î¿î ÇÁ·Î±×·¥À» ¸¸µé·Á°í Çϴµ¥ ÀÌ¹Ì ÀÌÀü¿¡ ³»°¡ ¸¸µé·Á°í ÇÏ´Â ÇÁ·Î±×·¥ÀÇ ±â´É ÀϺο¡ ´ëÇÑ ÄÚµå(code)°¡ ¸¸µé¾îÁ® ÀÖ´Ù¸é, ÀÌ ¾ó¸¶³ª ÇູÇÑ ÀÏÀΰ¡? °´Ã¼ÁöÇâ Æз¯´ÙÀÓÀ» Àû¿ëÇÑ ½Ã½ºÅÛ Áß¿¡¼­ ´ÙÇü¼ºÀ» °¡Àå ½±°Ô ´À³¥ ¼ö ÀÖ´Â °ÍÀÌ °´Ã¼ÁöÇâ ¾ð¾î¿¡¼­ Á¦°øÇÏ´Â ¡°»ó¼Ó(inheritance)¡±ÀÏ °ÍÀÌ´Ù. (ÀÌ ±ÛÀ» °´Ã¼ÁöÇâ Æз¯´ÙÀÓ¿¡ ´ëÇÑ °ÍÀÌ ¾Æ´Ï¹Ç·Î ´ÙÇü¼º¿¡ ´ëÇÑ ±¸Ã¼ÀûÀÎ ¼³¸í°ú ¿¹´Â °ü·Ã ¼­ÀûÀ» Âü°í) 

±×·¯³ª, ÀÌ·¯ÇÑ ´ÙÇü¼ºÀº ÇÁ·Î±×·¥ ¾ð¾î¿¡ À־´Â ÄÚµåÀÇ Àç»ç¿ë, ±×·¡ÇÈ »ç¿ëÀÚ ÀÎÅÍÆäÀ̽º(Graphic User Interface, GUI)¿¡¼­´Â ¸ÞŸÆ÷(metaphor)ÀÇ Àç»ç¿ë, ºÐ»ê ½Ã½ºÅÛ(distributed system)¿¡¼­´Â ÀνºÅϽº(instance)ÀÇ Àç»ç¿ë µîÀÇ ´Ù¾çÇÑ Àç»ç¿ëÀ» Á¦°øÇÏÁö¸¸, Á¤ÀÛ ½Ã½ºÅÛ µðÀÚÀÎ Ãø¸é¿¡¼­ÀÇ Àç»ç¿ë¼ºÀ» Á¦°øÇÏ´Â ±¸Ã¼ÀûÀÎ ¹æ¹ýÀº ¾ø´Â °Í °°´Ù. ÇϳªÀÇ ½Ã½ºÅÛÀ» ±¸ÃàÇϴµ¥ À־ °´Ã¼ ÁöÇâ Æз¯´ÙÀÓÀÌ °¡Áö°í ÀÖ´Â ´ÙÇü¼ºÀ» ÀÌ¿ëÇÏÁö ¾Ê°í ½Ã½ºÅÛ µðÀÚÀÎ Ãø¸é¿¡¼­ Àç»ç¿ë¼ºÀ» ¾òÀ» ¼ö ÀÖ´Â ¹æ¹ýÀ¸·Î ¡°µðÀÚÀÎ ÆÐÅÏ(Design patterns)¡±ÀÌ ÀÖ´Ù. ÀÌ ±Û¿¡¼­ ¾ÕÀ¸·Î ¾Ë¾Æº¸·Á°í ÇÏ´Â µðÀÚÀÎ ÆÐÅÏÀº ½Ã½ºÅÛ ±¸Ãà°úÁ¤¿¡¼­ ÄÚµå ¼öÁØ¿¡¼­ÀÇ Àç»ç¿ë¼ºÀ» °¡´ÉÇÏ°Ô ÇØ ÁÖÁö´Â ¾ÊÁö¸¸ ±× º¸´Ù ´õ Áß¿äÇÑ ½Ã½ºÅÛ µðÀÚÀνÃÀÇ ¡°µðÀÚÀÎ Àç»ç¿ë¼º¡±À» Á¦°øÇÏ¿© ÁØ´Ù. 

¡°µðÀÚÀÎ Àç»ç¿ë¼º¡±À» Á¦°øÇÏ´Â µðÀÚÀÎ ÆÐÅÏ¿¡ ´ëÇÑ Á߿伺À» ÀνÄÇÏ°í °´Ã¼ÁöÇâ ´º½º·¹ÅÍÀÇ ÇÑ ¼½¼ÇÀ¸·Î ¡°µðÀÚÀÎ ÆÐÅÏ¡±¿¡ ´ëÇÑ ºÎºÐÀ» ÇÒ¾Ö ÇÏ¿´´Ù.   ¡°µðÀÚÀÎ ÆÐÅÏ¡±À» µé¾î º» µ¶ÀÚµµ ÀÖÀ» °ÍÀÌ°í ±× À̸§ÀÌ »ý¼ÒÇÏ°Ô µé¸®´Â µ¶ÀÚµµ ÀÖÀ» °ÍÀÌ´Ù. ÀÌ ¹ø¿¡´Â ¿ì¼± ±× ù¹ø°·Î µðÀÚÀÎ ÆÐÅÏÀÌ ¹«¾ùÀΰ¡¿¡ ´ëÇؼ­ ¾Ë¾Æº¸°í ¾ÕÀ¸·Î ¾î¶»°Ô À̾߱⸦ Àü°³ÇØ ³ª°¥ Áö¿¡ ´ëÇؼ­ À̾߱âÇÑ´Ù.  º»°ÝÀûÀÎ ½ÃÀÛÀº ´ÙÀ½ È£ºÎÅÍ Çϵµ·Ï ÇÒ ¿¹Á¤ÀÌ´Ù. 
 
 

¢º µðÀÚÀÎ ÆÐÅÏÀ̶õ?

¿©·¯ »ç¶÷µéÀÌ ¸»ÇÏ´Â µðÀÚÀÎ ÆÐÅÏ¿¡ ´ëÇÑ Á¤ÀǸ¦ Á¾ÇÕÇØ º¸¸é µðÀÚÀÎ ÆÐÅÏÀ̶õ ÇÑ ¸¶µð·Î 

¡°¼ÒÇÁÆ®¿þ¾î ¿£Áö´Ï¾îÀÇ °æÇ衱 

À̶ó°í Á¤ÀÇÇÒ ¼ö ÀÖ´Ù. À§ÀÇ Á¤ÀÇÀÇ Àǹ̸¦ ºê¶óÀ̾ð ÈÄÆ®(Brian Foote)[2]´Â ¿µ¾ÇÇÏ°í °ÔÀ¸¸¥ °ÇÃà°¡¿¡ ´ëÇÑ Àç¹ÌÀÖ´Â À̾߱⸦ ÅëÇؼ­ Àß ¼³¸íÇÏ°í ÀÖ´Ù. 

¾î´Â ÇÑ °ÇÃà°¡°¡ ´ëÇÐ °Ç¹°°ú ±× ÁÖº¯ÀÇ Àεµ¿¡ ´ëÇÑ ¼³°è¸¦ ¸Â°Ô µÇ¾ú´Ù. ±×·¯³ª ±× °ÇÃà°¡´Â ´ëÇÐ °Ç¹°¸¸À» ¼³°èÇØ ³õ°í ±× °Ç¹° ÁÖº¯ÀÇ Àεµ¿¡ ´ëÇÑ ¼³°è´Â ÇÏÁö ¾Ê°í ÀÖ¾ú´Ù. ±×·¡¼­ °Ç¹°Àº Áö¾îÁ³Áö¸¸ »ç¶÷ÀÌ ´Ù´Ò ¼ö ÀÖ´Â Àεµ´Â ¾ÆÁ÷ ¾ø¾ú´Ù. ½Ã°£ÀÌ Áö³ª¼­ ´«ÀÌ ³»¸®´Â °Ü¿ïÀÌ µÇ¾ú´Ù. »ç¶÷µéÀº °Ç¹° ÁÖÀ§¿¡ Àεµ°¡ ¾ø¾ú±â  ¶§¹®¿¡ °¢ÀÚ°¡ ÆíÇÑ ´ë·Î °Ç¹°ÁÖÀ§¸¦ °É¾î ´Ù³æ´Ù. °Ü¿ïÀÌ µÇ±â Àü±îÁö Àεµ¸¦ ¸¸µéÁö ¾Ê°í °ÔÀ¸¸§(?)À» ÇÇ¿ì´ø °ÇÃà°¡´Â »çÁø±â¸¦ °¡Áö°í »ç¶÷µéÀÌ ´« À§¿¡ ¸¸µé¾î ³õÀº °Ç¹°°ú °Ç¹° »çÀÌÀÇ ¹ßÀÚ±¹ÀÇ ¸ð¾çÀ» Âï±â ½ÃÀÛÇß´Ù. ±ä °Ü¿ïÀÌ Áö³ª°í º½ÀÌ µÇ¾î¼­ °ÇÃà°¡´Â °Ü¿ï ³» Âï¾î µÎ¾ú´ø ¹ßÀÚ±¹ÀÇ »çÁøÀ» ¹ÙÅÁÀ¸·Î Àεµ¸¦ ¸¸µé±â ½ÃÀÛÇß´Ù. µðÀÚÀÎ ÆÐÅÏÀº ÀÌ¿Í  °°Àº ¼ºÁúÀ» °¡Áö°í ÀÖ´Ù. µðÀÚÀÎ ÆÐÅÏ ÀÛ°¡(writer)´Â ½Ã½ºÅÛÀÌ ¾î¶»°Ô µ¿ÀÛÇÒ °¡¿¡ ´ëÇÑ ¼º±ÞÇÏ°í °ËÁõµÇÁö ¾ÊÀº ÃßÃøÀ» ¹ÙÅÁÀ¸·Î ½Ã½ºÅÛ¿¡ ´ëÇÑ ¼³°è¸¦ Çϱ⠺¸´Ù´Â ¿µ¾ÇÇÏ°í °ÔÀ¸¸¥ °ÇÃడó·³ ´« À§ÀÇ ¹ßÀÚ±¹À» ã¾Æ¼­ ¾î¶»°Ô ÀÛµ¿Çß´ÂÁö¸¦ ±â¼úÇÑ´Ù.
À§ÀÇ ¿¹È­¿¡¼­ ´« À§ÀÇ ¹ßÀÚ±¹Àº ¿©·¯ ´Ù¸¥ ¼ÒÇÁÆ®¿þ¾î ¿£Áö´Ï¾îÀÇ °æÇèÀ» ÀǹÌÇÏ°í ¿µ¾ÇÇÑ °ÇÃà°¡´Â »õ·Î¿î ½Ã½ºÅÛÀ» µðÀÚÀÎ ÇÏ´Â °úÁ¤¿¡¼­ ±âÁ¸ÀÇ ¿©·¯ ¼ÒÇÁÆ®¿þ¾î ¿£Áö´Ï¾î¿¡ ÀÇÇؼ­ °ËÁõµÈ µðÀÚÀÎÀ» »ç¿ëÇÏ°í ÀÖ´Â ¼ÒÇÁÆ®¿þ¾î ¿£Áö´Ï¾î¸¦ ³ªÅ¸³½´Ù. Áï, µðÀÚÀÎ ÆÐÅÏÀ̶õ ½Ã½ºÅÛ µðÀÚÀÎ ½Ã¿¡ ÀÚÁÖ ¹ß»ýÇÏ´Â ¹®Á¦µé¿¡ ´ëÇÑ ¡°Àç»ç¿ë °¡´ÉÇÑ ÇØ°áÃ¥¡±À̶ó°í ÀÌÇØ ÇÒ ¼ö ÀÖ´Ù. 

±×·¯¸é µðÀÚÀÎ ÆÐÅÏÀÌ ÁÖ´Â ÀÌÁ¡Àº ¹«¾ùÀϱî? Å©°Ô µÎ °¡Áö·Î »ý°¢ÇØ º¼ ¼ö ÀÖ´Ù. °æÇèÀÌ ¸¹Àº ¼ÒÇÁÆ®¿þ¾î ¿£Áö´Ï¾îÀÇ °æ¿ì¿¡´Â ÀÌ¹Ì ¸¹Àº ½Ã½ºÅÛ µðÀÚÀÎ °æÇèÀ» °¡Áö°í À־ ´ëºÎºÐÀÇ ¹®Á¦¿¡ ´ëÇÑ ³ª¸§´ë·ÎÀÇ ÇعýÀ» °¡Áö°í ÀÖÀ» °ÍÀÌ´Ù. °æÇèÀÌ ¸¹Àº ¼ÒÇÁÆ®¿þ¾î ¿£Áö´Ï¾îµéÀÇ ÀÌ  °°Àº ÇعýµéÀ» Àß Á¤¸®Çؼ­ À̸§À» ºÎ¿©ÇÏ°í µðÀÚÀÎÀûÀÎ Ãß»ó¼ºÀ» ÁÖ¾î ÆÐÅÏÈ­ ½ÃÅ°¸é, ÀÌ °ÍµéÀÌ ÇϳªÀÇ ½Ã½ºÅÛ µðÀÚÀÎ ½ÃÀÇ °øÅë ¾ð¾î ¿ªÇÒÀ» ÇÏ°Ô µÇ¾î, °æÇè ¸¹Àº À̵éÀÌ ÀÌ °øÅëÀÇ ¾ð¾î¸¦ ÀÌ¿ëÇÏ¸é ±×·¸Áö ¾ÊÀ» °æ¿ìº¸´Ù Á» ´õ È¿À²ÀûÀ¸·Î Çùµ¿ ÀÛ¾÷À» ÇÒ ¼ö ÀÖ°Ô µÈ´Ù. ¶ÇÇÑ ÀÌ°ÍÀº ¾î¶² ¹®Á¦¿¡ ´ëÇؼ­ Ç¥Çö¸¸ ´Ù¸£°Ô µÇ¾î ÀÖ´Â °°Àº Çعý¿¡ ´ëÇÑ ¼ÒÇÁÆ® ¿£Áö´Ï¾îµé¿¡ »çÀÌÀÇ ºÒÇÊ¿äÇÑ ³íÀïÀ» ÇÏ´Â ½Ã°£À» ÁÙ¿©ÁÙ ¼ö µµ ÀÖ´Ù. °æÇèÀÌ ¾ø´Â ¼ÒÇÁÆ®¿þ¾î ¿£Áö´Ï¾î¿¡ ´ëÇؼ­´Â °æÇè ¸¹Àº À̵é·ÎºÎÅÍÀÇ È¿À²ÀûÀÌ°í À¯¿ë¼ºÀÌ ÁÁÀº µðÀÚÀο¡ ´ëÇÑ ÇعýÀ» ªÀº ½Ã°£¿¡ ÀÍÈ÷°í ¾ò¾î ÀÚ½ÅÀÌ µðÀÚÀÎ ÇÏ°í ÀÖ´Â ½Ã½ºÅÛÀÇ ¾ÈÁ¤¼º°ú ¼º´ÉÀ» ³ôÀÏ ¼ö ÀÖ´Â ÀåÁ¡ÀÌ ÀÖ´Ù.
 
 

¢º µðÀÚÀÎ ÆÐÅÏÀÇ ¿ª»ç

¼ÒÇÁÆ®¿þ¾î¿¡ ´ëÇÑ µðÀÚÀÎ ÆÐÅÏÀÇ ¾ÆÀ̵ð¾î´Â °ÇÃà ºÐ¾ß¿¡¼­ ³ª¿Ô´Ù. 1977³â°ú 1979³â¿¡ °ÇÃà°¡ÀÎ Å©¸®½ºÅäÆÛ ¾Ë·º»ê´õ(Christopher Alexander)´Â ¡°A Pattern Language:Towns, Buildings, Construction¡±¶ó´Â Á¦¸ñÀÇ Ã¥°ú ¡°The Timeless Way of Building¡±À̶ó´Â Á¦¸ñÀÇ Ã¥ µÎ ±ÇÀ» ¹ßÇ¥Çß´Ù.  ÀÌ µÎ ±ÇÀÇ Ã¥ÀÌ ´ã°í ÀÖ´Â ±âº» ¾ÆÀ̵ð¾î´Â °ÇÃ๰ÀÇ ¼³°è¿¡ ºó¹øÇÏ°Ô ¹ß»ýÇÏ´Â µ¿ÀÏ ¼³°è ³»¿ëÀÌ ÀÖÀ¸¸ç µû¶ó¼­, ÀÌ·± °ÍµéÀ» ÇϳªÀÇ ÆÐÅÏÀ¸·Î º¸°í ´Ù¸¥ °ÇÃ๰ ¼³°è¿¡ Àç»ç¿ëÇÏ´Â °ÍÀÌ ¿©·¯ °¡Áö ¸é¿¡¼­ À̵æÀ» °¡Á® ´Ù Áشٴ °ÍÀÌ´Ù.  µÎ ±ÇÀÇ Ã¥ÀÌ ´ã°í ÀÖ´Â ÀÌ·± ±âº» ¾ÆÀ̵ð¾î´Â °ÇÃà ¿µ¿ªÀ» ¹þ¾î³­ ¼ÒÇÁÆ®¿þ¾î¿Í  °°Àº ´Ù¸¥ ¿µ¿ª¿¡¼­µµ Àû¿ëÇÒ ¼ö ÀÖ¾ú´Ù. 

1987³â ¿öµå Ä¿´×Çè(Ward Cunningham)°ú ÄËÆ® º¤(Kent Beck)Àº ¾Ë·º»ê´õÀÇ ¾ÆÀ̵ð¾î¸¦ »ç¿ëÇؼ­ »ç¿ëÀÚ ÀÎÅÍÆäÀ̽º(User interface)¿¡ ´ëÇÑ ´Ù¼¸ °¡ÁöÀÇ ÆÐÅÏÀ» ¸¸µé¾ú´Ù. ±×¸®°í ÀÌ ³»¿ëÀº ¡°Using Pattern Languages for Object-Oriented Programs¡±¶ó´Â Á¦¸ñÀ¸·Î Á¤¸®µÇ¾î °´Ã¼ ÁöÇâ¿¡ °üÇÑ ¼¼°èÀûÀÎ ÄÁÆÛ·±½º(conference)ÀÎ OOPSLA-87(Object-Oriented Programming, Systems, Languages & Applications ? 87)¿¡ ³í¹®À¸·Î ¹ßÇ¥µÇ¾î µðÀÚÀÎ ÆÐÅÏ¿¡ ´ëÇؼ­ Çа迡 °ø½ÄÀûÀ¸·Î ¾Ë¸®´Â °è±â°¡ µÇ¾ú´Ù. 

1990³â´ë ÃÊ¿¡´Â ¿¡¸¯ °¨¸¶(Erich Gamma), ¸®Â÷µå Ç︧(Richard Helm), Á¸ ºí¸®ÀÚÀ̵å(John Vlissides), ¶öÇÁ Á¸½¼(Ralph Johnson)ÀÌ 90³â´ë °¡Àå ¿µÇâÀ» ÁÖ¾ú´ø ÄÄÇ»ÅÍ Ã¥ÀÇ ÇÑ °¡ÁöÀÎ ¡°Design Patterns: Elements of Reusable Object-Oriented Software¡±À̶õ Ã¥ Á¦ÀÛÀ» ½ÃÀÛ Çß´Ù. ÀÌ Ã¥Àº 1994³â¿¡ ¹ßÇ¥µÇ¾î µðÀÚÀÎ ÆÐÅÏ¿¡ ´ëÇÑ ¾ÆÀ̵ð¾î¸¦ ³Î¸® ¾Ë¸®´Â °è±â¸¦ ¸¸µé¾úÀ¸¸ç, ÀÌ Ã¥Àº Ã¥ÀÇ Á¦¸ñÀÌ ±ä ÀÌÀ¯·Î ÀÎÇؼ­ 'GoF(Gang of Four) book'¶ó´Â º°ÄªÀ¸·Î ºÒ¸®°í ÀÖ´Ù. 
 
 

¢º ¾ÕÀ¸·ÎÀÇ À̾߱â Àü°³¡¦

ÇöÀç ¹Ì±¹³»ÀÇ ÆÐÅÏ ÄÁÆÛ·±½º(conference)ÀÎ PloP(Pattern Languages of Programs)¿Í À¯·´ÀÇ ÆÐÅÏ ÄÁÆÛ·±½ºÀÎ EuroPLoP¸¦ ÅëÇؼ­ °ø½ÄÀûÀ¸·Î ¹ßÇ¥µÇ¾î ¾Ë·ÁÁ® ÀÖ´Â µðÀÚÀÎ ÆÐÅÏÀÇ ¼ö´Â ¼ö ¹é°¡Áö¿¡ À̸¥´Ù.  ÀÌ ¸ðµç µðÀÚÀÎ ÆÐÅÏ¿¡ ´ëÇؼ­ ¸ðµÎ ¾Ë¾Æ º»´Ù´Â °ÍÀº °¡´ÉÇÏÁöµµ ¾Ê°í ÇÊ¿äÇÏÁöµµ ¾Ê´Ù.  ¿Ö ¸ðµç µðÀÚÀÎ ÆÐÅÏÀ» ÀÍÈ÷´Â °ÍÀÌ ÇÊ¿äÇÏÁö ¾ÊÀºÁö´Â ¾ÕÀ¸·Î µðÀÚÀÎ ÆÐÅÏÀ» Çϳª¾¿ ¼Ò°³Çϸ鼭 À̾߱âÇÒ °ÍÀÌ´Ù. ±×¸®°í, ±× °ÍÀº ÇÊÀÚ°¡ ±¸Áö À̾߱â ÇÏÁö ¾Ê¾Æµµ µðÀÚÀÎ ÆÐÅÏÀ» ÀÍÇô °¡¸é¼­ ÀÚ¿¬½º·´°Ô ¾Ë°Ô µÉ °ÍÀ̶ó »ý°¢ÀÌ µç´Ù. 

µû¶ó¼­, °´Ã¼ÁöÇâ ´º½º·¹ÅÍÀÇ µðÀÚÀÎ ÆÐÅÏ ¼½¼Ç¿¡¼­ ´Ù·ç·Á´Â °ÍÀº °¡Àå ±âº»ÀûÀ̶ó°í ÀÎÁ¤µÇ°í ÀÖ´Â Gang of Four[1]¿¡ ³ª¿Í ÀÖ´Â °ÍµéÀ» Áß½ÉÀ¸·Î µðÀÚÀÎ ÆÐÅÏÀÌ °®°í ÀÖ´Â Àǹ̸¦ »ý°¢ÇØ º¼ ¿¹Á¤ÀÌ´Ù.

¡°°øÂ¥´Â ¾ø´Ù!!¡± 
¡°There¡¯s no Magic !!¡±

´ëºÎºÐÀÇ °ÍÀÌ ±×·¸µíÀÌ °øÂ¥´Â ¾ø´Ù.  µðÀÚÀÎ ÆÐÅϵµ ¿ì¸®°¡ ±â´ëÇÏ´Â ¸¶¹ýÀÇ ºÀÀ» ¿ì¸®µéÀÇ ¼Õ¿¡ Áã¾î ÁÖÁö´Â ¾Ê´Â´Ù.  µðÀÚÀÎ ÆÐÅϵµ ¾î¶² Àǹ̿¡¼± ¿ì¸®°¡ °´Ã¼ ÁöÇâÀûÀÎ ½Ã½ºÅÛÀ» µðÀÚÀÎ Çϴµ¥ À־ À¯¿ëÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖ´Â ÇϳªÀÇ µµ±¸·Î º¼ ¼ö ÀÖ´Ù. µû¶ó¼­, ¿ì¸®°¡ µðÀÚÀÎ ÆÐÅÏÀ» ½Ã½ºÅÛ µðÀÚÀÎ ½Ã¿¡ È¿À²ÀûÀ¸·Î »ç¿ëÇϱâ À§Çؼ­´Â ²ÙÁØÇÑ °øºÎ¿Í ¹è¿î °ÍÀ» Àû¿ëÇØ º¸·Á´Â ³ë·ÂÀÌ ÇÊ¿äÇϸç Á¾±¹¿¡ °¡¼­´Â »õ·Î¿î µðÀÚÀÎ ÆÐÅÏÀ» ã¾Æ ³»¾î Á¤¸®ÇÒ ¼ö ÀÖ´Â ´É·Âµµ ±æ·¯¾ß ÇÒ °ÍÀÌ´Ù.

Áö±Ý±îÁö µðÀÚÀÎ ÆÐÅÏÀÌ ¹«¾ùÀÎÁö¸¦ °£´ÜÈ÷ ¼³¸íÇÏ¿© º¸¾Ò´Ù. ÇÏÁö¸¸, À§ÀÇ ¸î ÀÚ ¾È µÇ´Â ±ÛÀÇ ³»¿ëÀ» ÅëÇؼ­´Â µðÀÚÀÎ ÆÐÅÏ¿¡ ´ëÇÑ °¨À» Àâ±â ¾î·Á¿ï °ÍÀÌ´Ù. ¾Æ¹«¸® ¼ö¹Ú ¸ÀÀ» À̾߱â ÇØ Áصé, ÇÑ ¿©¸§ÀÇ ¼ö¹Ú ¸ÀÀ» º¸Áö ¾Ê°í ¾î¶»°Ô ¾Ë ¼ö Àְڴ°¡?  ´ÙÀ½ È£¿¡¼­´Â À§¿¡¼­ À̾߱âÇÑ µðÀÚÀÎ ÆÐÅÏ¿¡ ´ëÇÑ ÀϹÝÀûÀÎ À̾߱⸦ ±¸Ã¼ÀûÀÎ ÆÐÅÏÀ» ÅëÇØ È®ÀÎÇØ º¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù. 
 
 

¢º ÀÌ ±ÛÀ» Àд ºÐµé¿¡°Ô¡¦

ÇÊÀÚµµ ÇöÀç µðÀÚÀÎ ÆÐÅÏÀ» °øºÎÇÏ¸ç °øºÎÇÑ °ÍÀ» ¿¬±¸½Ç¿¡¼­ ÁøÇàÇÏ°í ÀÖ´Â ½Ã½ºÅÛ¿¡ Àû¿ëÇØ º¸·Á´Â ³ë·Â°ú ÇöÀç µðÀÚÀÎ ÇÏ°í ÀÖ´Â ½Ã½ºÅÛ¿¡¼­ »ç¿ëµÇ¾î Áö°í ÀÖ´Â ÆÐÅÏÀ» ã¾Æº¸·Á´Â ½Ãµµ¸¦ ÇÏ°í ÀÖ½À´Ï´Ù. µû¶ó¼­, ¾ÆÁ÷ ÇÊÀÚµµ ºÎÁ·ÇÑ Á¡ÀÌ ¸¹Àº °¡¿îµ¥¿¡ ÀÌ ±ÛÀ» ¾²°í ÀÖ´Â »óȲÀ̶ó ±ÛÀÇ ³»¿ë °¡¿îµ¥´Â À߸øµÈ Á¡ÀÌ ¸¹ÀÌ ÀÖÀ¸¸®¶ó »ý°¢ÇÕ´Ï´Ù. ±ÛÀÇ ³»¿ë °¡¿îµ¥¿¡ ¾ÕµÚ°¡ ¸ÂÁö ¾Ê´Â ºÎºÐÀ̳ª À߸øµÈ ºÎºÐÀÌ ¾øµµ·Ï ÃÖ´ëÇÑ ³ë·ÂÀ» ±â¿ïÀÌ°ÚÁö¸¸, Ȥ½Ã¶óµµ ±×·± °ÍµéÀÌ ¹ß°ßµÇ¸é ¼­½¿¾øÀÌ ¾Ë·Á Áֱ⠹ٶø´Ï´Ù. ÀÌ ±ÛÀº Àú¿Í ÀÌ ±ÛÀ» Àд ¿©·¯ºÐµéÀÌ ÇÔ²² ¾²´Â °ÍÀ̶ó°í »ý°¢À» ÇÕ´Ï´Ù.
 
 
 

¢º ÄÚµù ±ÔÄ¢(Coding rules)
 

ÀÌ °÷¿¡¼­´Â µðÀÚÀÎ ÆÐÅÏ¿¡¼­ ´ÙÀ½ È£ºÎÅÍ »ç¿ëÇÒ ÀÚ¹Ù¾ð¾îÀÇ ÄÚµù ±ÔÄ¢¿¡ ´ëÇؼ­ ¼³¸íÇÑ´Ù.  ¿Ö ÀÚ¹Ù ¾ð¾î¸¦ »ç¿ëÇÏ´ÂÁö´Â ´ÙÀ½ È£ÀÇ ±ÛÀ» ÂüÁ¶Ç϶ó. 

°³ÀÎÀûÀ¸·Î »ç¿ëÇÏ°í ÀÖ¾ú´ø ³ª¸§´ë·ÎÀÇ ÄÚµù ±ÔÄ¢µµ ÀÖ°í, ¿¬±¸½Ç¿¡¼­ ÆÀ ÇÁ·ÎÁ§Æ®¸¦ Çϸ鼭 µû¶ú´ø ÄÚµù ±ÔÄ¢µµ ÀÖ¾úÁö¸¸, ¿©±â¼­´Â Doug LeaÀÇ ÄÚµù ±ÔÄ¢À» µû¸¥´Ù[3].  Ưº°È÷ Doug Lea°¡ »ç¿ëÇÏ°í ÀÖ´Â ÄÚµù±ÔÄ¢À» µû¸£´Â ÀÌÀ¯´Â ¾ø´Ù. Nigel Warren°ú Philip BishopÀÌ ¾´ Ã¥¿¡¼­ Doug LeaÀÇ ÄÚµù ±ÔÄ¢À» µû¶ó ÀÚ¹Ù Äڵ带 »ç¿ëÇÏ°í Àִµ¥, °³ÀÎÀûÀ¸·Î º¼ ¶§ Doug LeaÀÇ ÄÚµù ±ÔÄ¢Àº ÀüüÀûÀ¸·Î ¸íÈ®ÇÏ¿© ÄÚµåÀÇ ÀǹÌÀü´ÞÀÌ Àß Àü´ÞµÈ´Ù°í »ý°¢Ç߱⠶§¹®ÀÌ´Ù[4]. ´ÙÀ½Àº Doug LeaÀÇ ÄÚµù ±ÔÄ¢À¸·Î Nigel Warren°ú Philip BishopÀÌ ¾´ Ã¥¿¡¼­ Á¤¸®ÇØ ³õÀº °ÍÀ» ÀûÀº °ÍÀÌ´Ù.
 

Packages
    lowercase

Interface
    UpperAndLowerCase

Class À̸§
    UpperAndLowerCase

¶Ç´Â Interface¿Í ±¸ºÐ Áþ±â À§Çؼ­ 
    InterfaceNameImpl

Abstract class
    UpperAndLowerCase

¶Ç´Â Interface¿Í ±¸ºÐ Áþ±â À§Çؼ­
    AbstractInterfaceName

Exception class
    ClassNameEndsWithException
    ReallyLongClassNameEndsWithException

Constants
    UPPER_CASE_WITH_UNDERSCORES

Instance and class variables(fields)
    trailingUnderscore_

Local variables
    firstWordLowerCase

Methods
   firstWordLowerCase()
 

¿¹)

public class CodingConventionsImpl 
            extends AbstractCodingConventions
            implements CodingConventions   {

     private int intField_;
     public static final int PUBLIC_CONSTANT = 0;

     public void mehodThatThrowsException()
              throws CodingConventionException  { . . . }

     public void methodWithLocalVariable(int[] array) {
             int numObjects = array.length;
     }
}
 
 
 

Âü°í ¹®Çå 

[1] Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, 
       Design Patterns, Addison-Wesley, 1995.

[2] Pattern languages of Program Design 3, edited by Robert Martin, 
       Dirk Riehle, Frank Bschmann, Addison-Wesley, 1998.

[3] Doug Lea, Concurrent Programming in Java, Addison-Wesley , 1997

[4] Nigel Warren, Philip Bishop, Java in Practice, Design Styles and Idioms for 
       Effective Java, Addison-Wesley, 1999


 oonewsletter - 2000/1/24