Ã¥»êÁö´Â 7°³¿ù Á¤µµ µÇ¾úÁö¸¸ Çѹø ÆîÃĺ¸°í µ¤¾î ³õÀº Ã¥À̶ó »õÃ¥ÇÏ°í ¶È°°½À´Ï´Ù. Àúº¸´Ù µµ¿òµÇ´Â ÁÖÀθ¸³ª´Â°Ô ÁÁÀ» µí Çؼ ½Î°Ô ÆǸÅÇÕ´Ï´Ù. ±¸·ÎÂÊÀº Á÷°Å·¡ °¡´ÉÇÕ´Ï´Ù.
1Àå. À§´ëÇÑ ¼ÒÇÁÆ®¿þ¾î´Â ¿©±â¿¡¼ ½ÃÀ۵ȴ٠¶ô¾Ø·ÑÀº ¿µ¿øÇÏ´Ù! ¸¯ÀÇ ºû³ª´Â »õ ÇÁ·Î±×·¥... ¿©·¯ºÐÀ̶ó¸é ¹«¾ùÀ» ¸ÕÀú ¹Ù²Ù°Ú½À´Ï±î? À§´ëÇÑ ¼ÒÇÁÆ®¿þ¾î´Â... ½¬¿î 3´Ü°è·Î À§´ëÇÑ ¼ÒÇÁÆ®¿þ¾î ¸¸µé±â ¿ì¼± ±â´É¿¡ ÁßÁ¡À» µÎ¼¼¿ä Å×½ºÆ® ±¸µ¿ ¹®Á¦Á¡ ã¾Æº¸±â ºÐ¼® °´Ã¼ÁöÇâÀÇ ±âº» ¿ø¸® Àû¿ë ¼³°è ÇÑ ¹øÇÏ°í, ¼³°è µÎ ¹øÇÏ°í ¿©·¯ºÐÀÇ ÇÁ·Î±×·¥À» ¼öÁ¤ÇÏ´Â °ÍÀÌ ¾î´À Á¤µµ ½¬¿î°¡¿ä? º¯ÇÏ´Â °ÍÀ» ĸ½¶ÈÇϼ¼¿ä À§ÀÓ À§´ëÇÑ ¼ÒÇÁÆ®¿þ¾î(Áö±Ý¿¡´Â) OOA&D´Â À§´ëÇÑ ¼ÒÇÁÆ®¿þ¾î¸¦ ÀÛ¼ºÇÏ´Â ¹æ¹ý¿¡ °üÇÑ °ÍÀÔ´Ï´Ù ÇÙ½É Á¤¸® 2Àå. ±×µé¿¡°Ô ¿øÇÏ´Â °ÍÀ» ÁÖ¼¼¿ä »õ·Î¿î ÇÁ·Î±×·¡¹Ö ÀÏÀÌ »ý°å½À´Ï´Ù Å×½ºÆ® ±¸µ¿ À߸øµÈ »ç¿ë(ÀÏÁ¾ÀÇ) ¿ä±¸ »çÇ×ÀÌ ¹«¾ùÀԴϱî? ¿ä±¸ »çÇ× ¸®½ºÆ® ¸¸µé±â ¹®Á¦ ¹ß»ý¿¡ ´ëÇÑ °èȹ¾È ½Ã½ºÅÛÀÇ ¹®Á¦´Â ´ëü °æ·Î°¡ ÇØ°á À¯½ºÄÉÀ̽º¸¦ ¼Ò°³ÇÕ´Ï´Ù ÇϳªÀÇ À¯½ºÄÉÀ̽º, ¼¼ °¡Áö ºÎºÐ À¯½ºÄÉÀ̽º¸¦ °¡Áö°í ¿ä±¸ »çÇ× Ã¼Å©Çϱ⠿©·¯ºÐÀÇ ½Ã½ºÅÛÀº ½ÇÁ¦ »óȲ¿¡¼ µ¿ÀÛÇØ¾ß ÇÕ´Ï´Ù ÇູÇÑ °æ·Î ¾Ë¾Æº¸±â OOA&D µµ±¸ »óÀÚ 3Àå. ´ç½ÅÀ» »ç¶ûÇØ¿ä. ´ç½ÅÀº ¿Ïº®ÇØ... ±×·±µ¥ ÀÌ°Ç Á» ¹Ù²åÀ¸¸é ´ç½ÅÀº ³ªÀÇ ¿µ¿õÀÔ´Ï´Ù! ´ç½ÅÀº ¹Ùº¸ÀÔ´Ï´Ù! ¼ÒÇÁÆ®¿þ¾î ºÐ¼®°ú ¼³°è¿¡¼ º¯ÇÏÁö ¾Ê´Â ÇÑ °¡Áö ¼±Åà °æ·Î? ´ëü °æ·Î? ±¸º°ÀÌ ¾î·Á¿ö¿ä! À¯½ºÄÉÀ̽º´Â ¿©·¯ºÐÀÌ ÀÌÇØÇϱ⠽¬¿ö¾ß ÇÕ´Ï´Ù ½ÃÀÛºÎÅÍ ³¡: ÇϳªÀÇ ½Ã³ª¸®¿À ´ëü °æ·ÎÀÇ °í¹é ¿ä±¸ »çÇ× ¸®½ºÆ® ³¡³»±â Áߺ¹ ÄÚµå´Â ³ª»Û »ý°¢ÀÔ´Ï´Ù ¸¶Áö¸· Å×½ºÆ® ±¸µ¿ ¿©·¯ºÐ ½º½º·ÎÀÇ µðÀÚÀÎ ¿ø¸®¸¦ ¾²¼¼¿ä OOA&D µµ±¸ »óÀÚ 4Àå. ¿©·¯ºÐÀÇ ¼ÒÇÁÆ®¿þ¾î¸¦ ½ÇÁ¦ ¼¼»óÀ¸·Î... °¾ÆÁö ÇÑ ¸¶¸®, °¾ÆÁö µÎ ¸¶¸®, °¾ÆÁö ¼¼ ¸¶¸®, ³× ¸¶¸® ÇÁ·Î±×·¥Àº µ¿ÀÛ È¯°æÀÌ ÀÖ½À´Ï´Ù ¹®Á¦ ã±â ÇØ°á ¹æ¾ÈÀÇ °èȹ µÎ ÇÁ·Î±×·¡¸ÓÀÇ À̾߱â À§ÀÓÀ¸·Î ¿ìȸ ´À½¼ÇÏ°Ô °áÇÕµÈ ÇÁ·Î±×·¥ÀÇ Èû À¯½ºÄÉÀ̽º¿¡¼ ¸í»çµé¿¡ ÁÖÀǸ¦ ±â¿ïÀ̼¼¿ä ºÐ¼®À» ÀßÇؼ Àû´çÇÑ Å¬·¡½º ã±â Ŭ·¡½º ´ÙÀ̾î±×·¥ÀÇ ºÐÇØ Å¬·¡½º ´ÙÀ̾î±×·¥ÀÌ ÀüºÎ´Â ¾Æ´Õ´Ï´Ù ÇÙ½É Á¤¸® 5Àå. (part1) º¯ÇÏÁö ¾Ê´Â °ÍÀº ¾ø´Ù ¸¯ÀÇ ±âŸ´Â ¹øâÇÏ°í ÀÖ½À´Ï´Ù Ãß»ó Ŭ·¡½º Ŭ·¡½º ´ÙÀ̾î±×·¥ ºÐ¼®(´Ù½Ã) UML ÄÁ´× ÆäÀÌÆÛ µðÀÚÀÎ ¹®Á¦ °æ°í À§´ëÇÑ ¼ÒÇÁÆ®¿þ¾î·Î ÇâÇÏ´Â 3´Ü°è(¿¹Àü¿¡ ÇÑ ³»¿ë) (¸·°£) °´Ã¼ ÁöÇâ ´ëÂü»ç! (part2) ¿©·¯ºÐÀÇ ¼ÒÇÁÆ®¿þ¾î¸¦ ¿îµ¿½ÃÄѼ Æ°Æ°ÇÏ°Ô ¸¸µå¼¼¿ä ¸¯ÀÇ °Ë»ö µµ±¸·Î ´Ù½Ã µ¹¾Æ°¡¼ search() ¸Þ½îµå ÀÚ¼¼È÷ »ìÆ캸±â ºÐ¼®À» ÅëÇØ ¾òÀº °Í Ŭ·¡½ºµéÀ» Çൿ(behavior)¿¡ °üÇÑ °ÍÀÔ´Ï´Ù µðÀÚÀÎ (°áÁ¤)ÀÇ Á×À½ À߸ø ³»¸° µðÀÚÀÎ °áÁ¤À» ¹Ù²Ù¼¼¿ä ¸¯ ÇÁ·Î±×·¥¿¡¼ÀÇ "ÀÌÁß Ä¸½¶È" ½Ç¼öÇÏ´Â °ÍÀ» µÎ·Á¿öÇÏÁö ¸¶¼¼¿ä ¸¯ÀÇ À¯¿¬ÇÑ ÇÁ·Î±×·¥ Àß µðÀÚÀÎµÈ ¸¯ÀÇ ÇÁ·Î±×·¥ ½ÃÇè ±¸µ¿ ¸¯ÀÇ ¼ÒÇÁÆ®¿þ¾î¸¦ º¯°æÇÏ´Â °ÍÀÌ ¾ó¸¶³ª ½¬¿î°¡¿ä? À§´ëÇÑ º¯°æ ¿ëÀ̼º ¹®Á¦ ÀÀÁýµÈ Ŭ·¡½º´Â ÇϳªÀÇ ÀÏÀ» Á¤¸» ÀßÇÕ´Ï´Ù µðÀÚÀÎ/ÀÀÁýµµ »ý¸í ÁÖ±â À§´ëÇÑ ¼ÒÇÁÆ®¿þ¾î´Â "ÃæºÐÈ÷ ÁÁ½À´Ï´Ù" OOA&D µµ±¸ »óÀÚ 6Àå. "³» À̸§Àº ¾ÆÆ® ¹Ýµ¨¸®... ³ª´Â °ÇÃà°¡¿¹¿ä" Å« ¹®Á¦ ÇØ°áÇϱâ Å« ¹®Á¦¸¦ ¾î¶»°Ô ¹Ù¶óº¸´Â °¡¿¡ ÇØ´äÀÌ ÀÖ½À´Ï´Ù ¿ä±¸ »çÇ×°ú À¯½ºÄÉÀ̽º·Î ½ÃÀÛÇÏ´Â °Íµµ ÁÁ½À´Ï´Ù °øÅëÁ¡°ú Â÷º°¼º Ư¡µé ã¾Æ ³»±â Ư¡°ú ¿ä±¸ »çÇ×ÀÇ Â÷ÀÌÁ¡ À¯½ºÄÉÀ̽º´Â °³¹ß ½Ã½ºÅÛ ÀüüÀÇ Å« ±×¸²À» º¸´Â µ¥ Ç×»ó µµ¿òÀÌ µÇÁö´Â ¾Ê½À´Ï´Ù À¯½ºÄÉÀ̽º ´ÙÀ̾î±×·¥ ÀÛÀº ¾×ÅÍ ¾×Å͵鵵 »ç¶÷ÀÔ´Ï´Ù. (Ç×»ó ±×·¸Áö´Â ¾ÊÁö¸¸) µµ¸ÞÀÎ ºÐ¼®À» Á» ÇØ º¾½Ã´Ù ³ª´²¼ Á¤º¹ÇÏ±â °í°´ÀÌ Á¤¸» ´©±¸ÀÎÁö ÀØÁö ¸¶¼¼¿ä µðÀÚÀÎ ÆÐÅÏÀÌ ¹¹ÁÒ? OOA&D(¿Í ¾à°£ÀÇ »ó½Ä)ÀÇ Èû OOA&D µµ±¸ »óÀÚ 7Àå. È¥¶õ½º·¯¿î ¼¼»ó¿¡ Áú¼¸¦ ¾î¶»°Ô ÇÒÁö Á» ¸·¸·ÇÏÁÒ? ¿ì¸®´Â ¾ÆÅ°ÅØó°¡ ÇÊ¿äÇÕ´Ï´Ù ±â´ÉºÎÅÍ ½ÃÀÛÇսô٠¹«¾ùÀÌ ¾ÆÅ°ÅØóÀûÀ¸·Î Áß¿äÇմϱî? ¾ÆÅ°ÅØó¿¡ °üÇÑ ¼¼ °¡Áö Áú¹® À§Çè ÁÙÀ̱⠽󪸮¿ÀµéÀÌ À§Çè¿ä¼Ò¸¦ ÁÙÀÌ´Â µ¥ µµ¿òÀÌ µË´Ï´Ù ÇÑ ¹ø¿¡ ÇϳªÀÇ Æ¯Â¡¿¡ ÁýÁßÇϼ¼¿ä ¾ÆÅ°ÅØó´Â µðÀÚÀÎÀÇ ±¸Á¶ÀÔ´Ï´Ù °øÅëÁ¡ ´Ù½Ã º¸±â °øÅëÁ¡ ºÐ¼® ¹«½¼ ¶æÀÌÁÒ? °í°´¿¡°Ô ¹°¾îº¸¶ó´Ï À§ÇèÀ» ÁÙÀÌ´Â °ÍÀÌ À§´ëÇÑ ¼ÒÇÁÆ®¿þ¾î¸¦ ¸¸µå´Â µ¥ µµ¿òÀÌ µË´Ï´Ù ÇÙ½É Á¤¸® 8Àå. µ¶Ã¢ÀûÀÎ µðÀÚÀÎÀº Á¤µµ²¯ µðÀÚÀÎ ¿ø¸® Á¤¸® °³¹æ_Æó¼âÀÇ ¿ø¸®(Open_Closed Principle, OCP) OCP¸¦ ´Ü°èÀûÀ¸·Î »ìÆ캸±â ¹Ýº¹ ±ÝÁöÀÇ ¿ø¸®(Don"t Repeat Yourself Principle_DRY) DRY´Â ÇϳªÀÇ ¿ä±¸ »çÇ×Àº ÇÑ °÷¿¡ µÎ¾î¾ß ÇÑ´Ù´Â ¿ø¸®ÀÔ´Ï´Ù ´ÜÀÏ Ã¥ÀÓÀÇ ¿ø¸®(Single Responsibility Principle, SRP) ¿©·¯ °³ÀÇ Ã¥ÀÓÀ» ã¾Æ³»±â ¿©·¯ °³ÀÇ Ã¥ÀÓµéÀ» ÇϳªÀÇ Ã¥ÀÓÀ¸·Î ¹Ù²Ù±â ¸®½ºÄÚÇÁ ġȯ ¿ø¸®(LSP) À߸øµÈ »ó¼Ó »ç¿ë: »ç·Ê ¿¬±¸ LSP´Â ¿©·¯ºÐÀÌ ¼³°èÇÑ »ó¼Ó ±¸Á¶ÀÇ ¼û°ÜÁø ¹®Á¦Á¡À» ã¾Æ ÁÝ´Ï´Ù. ÀÚ½Ä Å¸ÀÔÀº ºÎ¸ð ŸÀÔÀÌ »ç¿ëµÇ´Â °÷¿¡ ´ëüµÇ¾î »ç¿ëµÉ ¼ö ÀÖ¾î¾ß ÇÕ´Ï´Ù LSP¸¦ À§¹ÝÇϸé È¥¶õ½º·¯¿î Äڵ尡 µË´Ï´Ù ´Ù¸¥ Ŭ·¡½º¿¡ ±â´ÉÀ» À§ÀÓ(Delegation)Çϱ⠱¸¼º(Composition)À» »ç¿ëÇؼ ´Ù¸¥ Ŭ·¡½ºµéÀÇ ÇൿÀ» Á¶ÇÕÇϱâ ÁýÇÕ(Aggregation): °©Àڱ⠻ç¶óÁöÁö ¾Ê´Â ±¸¼º(Composition) ÁýÇÕ (Aggregation) ´ë ±¸¼º(Composition) »ó¼ÓÀº ¼±Åà »çÇ× Áß ÇϳªÀÏ »Ó ÇÙ½É Á¤¸® OOA&D µµ±¸ »óÀÚ 9Àå. ¼ÒÇÁÆ®¿þ¾î´Â ¿©ÀüÈ÷ °í°´À» À§ÇÑ °ÍÀÔ´Ï´Ù. ¿©·¯ºÐÀÇ µµ±¸ »óÀڴ ä¿öÁö°í ÀÖ½À´Ï´Ù ¿©·¯ºÐÀº ¹Ýº¹ ÀÛ¾÷À» ÅëÇØ À§´ëÇÑ ¼ÒÇÁÆ®¿þ¾î¸¦ ÀÛ¼ºÇÕ´Ï´Ù ¹Ýº¹ ½ÉÈ ÀÛ¾÷: µÎ °¡Áö ±âº»ÀûÀÎ ¼±Åà Ư¡ ÁÖµµ °³¹ß(Feature driven development) À¯½ºÄÉÀ̽º ÁÖµµ °³¹ß(Use case driven development) °³¹ßÀÇ µÎ °¡Áö Á¢±Ù ¹æ½Ä Ư¡ ºÐ¼® Å×½ºÆ® ½Ã³ª¸®¿À ÀÛ¼ºÇϱâ Å×½ºÆ® ÁÖµµ °³¹ß(test driven development) °øÅëÁ¡ ºÐ¼® °øÅëÁ¡ °Á¶Çϱâ ĸ½¶È °Á¶Çϱâ Å×½ºÆ®¸¦ ¼³°è¿¡ Àû¿ëÇϼ¼¿ä Å×½ºÆ® ÄÉÀ̽º ÇغÎ... ¿©·¯ºÐ ÀÚ½ÅÀ» °í°´¿¡°Ô ÀÔÁõÇØ º¸À̼¼¿ä ¿ì¸®´Â Áö±Ý±îÁö ¾àÁ¤(contract)¿¡ ÀÇÇØ ÇÁ·Î±×·¥À» ÀÛ¼ºÇß½À´Ï´Ù ¾àÁ¤¿¡ ÀÇÇÑ ÇÁ·Î±×·¡¹ÖÀ̶õ Á¤¸»·Î ¸ðµÎ ¹ÏÀ½¿¡ °üÇÑ °ÍÀÔ´Ï´Ù ¹æ¾îÀû ÇÁ·Î±×·¡¹Ö(depensive programming) ¾îÇø®ÄÉÀ̼ÇÀ» ±â´ÉÀÇ ÀÛÀº µ¢¾î¸®µµ ³ª´©¾î º¸¼¼¿ä ÇÙ½É Á¤¸® OOA&D µµ±¸ »óÀÚ 10Àå. Á¾ÇÕÇϱâ OOA&D ½ºÅ¸ÀÏ·Î ¼ÒÇÁÆ®¿þ¾î °³¹ßÇϱ⠰´Ã¼ ¸¶À» ÁöÇÏö ¹®Á¦ °´Ã¼ ¸¶À» ÁöÇÏö ³ë¼±µµ Ư¡ ¸®½ºÆ® À¯½ºÄÉÀ̽º´Â »ç¿ë¹ýÀ» ¹Ý¿µÇÏ°í, Ư¡Àº ±â´ÉÀ» ¹Ý¿µÇÕ´Ï´Ù ¹Ýº¹ ÀÛ¾÷(iteration) ½ÃÀÛÇϱâ ÁöÇÏö Ç¥½ÃÇϱ⿡ ´ëÇØ ÀÚ¼¼È÷ »ìÆ캸±â Line Ŭ·¡½º¸¦ »ç¿ëÇÏ´À³Ä, ¸¶´À³Ä °´Ã¼ ¸¶À» Subway (Ŭ·¡½º)ÀÇ Èï¹Ì·Î¿î Á¡µé ´ç½ÅÀÇ Å¬·¡½ºµé º¸È£Çϱâ ÈÞ½Ä ½Ã°£ ¿ä±¸ »çÇ× ´Ü°è·Î µ¹¾Æ°¡±â Äڵ忡 ÁýÁßÇÏ°í, ´ÙÀ½ °í°´µé¿¡°Ô ÁýÁßÇϼ¼¿ä ¹Ýº¹ ÀÛ¾÷Àº ¹®Á¦¸¦ ½±°Ô ÇÕ´Ï´Ù °æ·Î´Â ¾î¶»°Ô »ý°å³ª¿ä? ½º½º·Î °´Ã¼ ¸¶À» ÁöÇÏö ½Ã½ºÅÛÀ» Á¡°ËÇغ¸¼¼¿ä ¹Ýº¹ ÀÛ¾÷ #3, ´©±¸µçÁö? ¿©ÇàÀº ³¡³ªÁö ¾Ê¾Ò½À´Ï´Ù... ºÎ·Ï A. 10°³ÀÇ ÇÙ½É ÅäÇÈ (¿ì¸®°¡ ´Ù·çÁö ¾Ê¾Ò´ø) #1. IS_A¿Í HAS_A #2. À¯½ºÄÉÀ̽º Çü½Ä #3. ¾ÈƼ ÆÐÅÏ #4. CRC Ä«µå #5. ¸ÞÆ®¸¯(Metrics) #6. ½ÃÄö½º ´ÙÀ̾î±×·¥(Sequence Diagram) #7. »óÅ ´ÙÀ̾î±×·¥(State Diagram) #8. ´ÜÀ§ Å×½ºÆÃ(Unit testing) #9. ÄÚµù ±ÔÄ¢°ú Àб⠽¬¿î ÄÚµå #10. ¸®ÆÑÅ丵(Refactoring) ºÎ·Ï B. °´Ã¼ÁöÇâ ¾ð¾î·Î ¸»Çϱâ UML°ú Ŭ·¡½º ´ÙÀ̾î±×·¥ »ó¼Ó ´ÙÇü¼º ĸ½¶È ÇÙ½É Á¤¸®