[Áöµð³ÝÄÚ¸®¾Æ]¸®ÆÑÅ丵, º¹Àâ´Ù´ÜÇØÁö´Â Çö´ëÀÇ ¼ÒÇÁÆ®¿þ¾î °³¹ß¿¡¼ ÀÌ ´Ü¾î´Â Á¡Á¡ Áß¿äÇÑ À§Ä¡¸¦ Â÷ÁöÇØ °¡°í ÀÖ´Ù. ÀÌÁ¦ ¸®ÆÑÅ丵Àº ÁøÁ¤ÇÑ °³¹ßÀÚÀÇ ´ö¸ñ Áß¿¡ Çϳª¶ó°í ´Ü¾ðÇÒ ¼ö ÀÖÀ» Á¤µµ´Ù. ¸®ÆÑÅ丵À» ÇÑ´Ù´Â °ÍÀº °³¼±¿¡ ´ëÇÑ ÀÇÁö°¡ ÀÖÀ½À» ¶æÇϰí, Á» ´õ ³ªÀº ÄÚµå, ±¸Á¶, ÇÁ·Î¼¼½º¸¦ ÁöÇâÇÑ´Ù´Â Àǹ̰¡ µÈ´Ù. ¸®ÆÑÅ丵À¸·Î ¼ÒÇÁÆ®¿þ¾îÀÇ ¼º´ÉÀ» Á÷Á¢ÀûÀ¸·Î ³ôÀÌÁö´Â ¸ø ÇÑ´Ù. ÇÏÁö¸¸ ÄÚµåÀÇ °¡µ¶¼ºÀ» Áõ´ë½ÃÄÑ, »ý°¢ÇÏ´Â ÇÁ·Î±×·¡¸ÓµéÀÇ ¸Ó¸´¼Ó ¼º´ÉÀ» ³ô¿©ÁØ´Ù. 3ºÎ¿¡¼´Â ¸®ÆÑÅ丵 ¹æ¹ýµé¿¡ ´ëÇØ ¾Ë¾Æº»´Ù.
Çܹö°Å³ª Ä¿ÇÇ µîÀ» »ì ¶§, ¶Ç´Â ¹éÈÁ¡À̳ª ÆíÀÇÁ¡¿¡¼ ¹°°ÇÀ» »ì ¶§, ¿ì¸®´Â 1ȸ¿ë ¹°°ÇÀ» ¾²´Â °Í¿¡ ´ëÇÑ ¼¼±ÝÀ» ³½´Ù. 1ȸ¿ë ¹°°ÇÀ» ¾²¸é ȯ°æÀÌ ±×¸¸Å »¡¸® ÇÇÆóÇØÁö±â ¶§¹®À̶õ´Ù.
±×°Ô »ç½ÇÀÎÁö ¾Æ´ÑÁö ¸ð¸£°ÚÁö¸¸, ³» µ·ÀÌ ³ª°¡´Â °ÍÀº ¿ë³³ÀÌ ¾È µÈ´Ù. 1ȸ¿ëǰÀÇ Æí¸®ÇÔ. ±× ¹Ý´ë±ÞºÎ·Î ¸¸µé¾îÁö´Â ¾²·¹±â 󸮿¡ µû¸¥ ºñ¿ëÀ» ÁöºÒÇÑ´Ù°í Çϴµ¥, ¿µ ¸¾¿¡ ¾È µç´Ù.
Ȥ½Ã ÇÁ·Î±×·¥À» © ¶§µµ 1ȸ¿ë ÇÁ·Î±×·¥À» §´Ù´Â »ý°¢À» ÇØº» ÀûÀÌ Àִ°¡? ±×·±µ¥ ¿ì¸®´Â 1ȸ¿ë ÇÁ·Î±×·¥À» Â¥µµ ¼¼±ÝÀ» ³»Áö ¾Ê´Â´Ù. ´ÙÇàÀϱî? 1ȸ¿ë ÇÁ·Î±×·¥ÀÌ È¯°æ ÀÚ¿øÀ» ¼Ò¸ð½ÃŰÁö´Â ¾Ê´Â´Ù.
´Ù¸¸ 1ȸ¿ë ÇÁ·Î±×·¥Àº ¾²·¹±â¸¦ ¾ç»êÇÑ´Ù. ±×¶§±×¶§ ÇÊ¿äÇÑ´ë·Î Âï¾î³½ ÇÁ·Î±×·¥Àº ¼ö¸¹Àº Áߺ¹Äڵ带 ¾ç»êÇØ ³½´Ù. ÀçȰ¿ëÇÏÁö ¾Ê´Â ½À°ü Å¿¿¡ ½Ã½ºÅÛÀ̶ó´Â ȯ°æÀÌ ¹«°Å¿öÁö°í ¼ÕÀÌ ¸¹ÀÌ °¡µµ·Ï ¹Ù²î´Â °ÍÀÌ´Ù.
ÀçȰ¿ë¼ºÀº °´Ã¼ÁöÇâ ÇÁ·Î±×·¥ÀÇ Çٽɿø¸® ÁßÀÇ ÇϳªÀÌ´Ù. ÀçȰ¿ë¼ºÀ» ³ôÀδٴ °ÍÀº Âï¾î³¾ ¶§ »ç¿ëÇÏ´Â ÅÛÇø´À» ¾ê±âÇÏ´Â °ÍÀÌ ¾Æ´Ï´Ù. ¿ÀÈ÷·Á ¾÷¹«³ª ±â´ÉÀ» Á¦¾î °¡´ÉÇÑ °÷¿¡ Áý¾à½ÃÄѼ °ü¸®ÇÒ ¼ö ÀÖµµ·Ï ½Ã½ºÅÛ ÀüüÀÇ Ã»°áÇÑ »óŸ¦ À¯ÁöÇÏ´Â °ÍÀÌ´Ù. À̸®Àú¸® »êÀçµÈ Áߺ¹ Äڵ带 Á¤¸®ÇÏ´Â °ÍÀÌ ÇÙ½ÉÀÌ´Ù.
À̶§ ÇÊ¿äÇÑ ±â¼úÀÌ ¸®ÆÑÅ丵ÀÌ´Ù. ÀÌÂë ¾ê±âÇÏ¸é ¸®ÆÑÅ丵Àº Á¤¸® Á¤µ·¿¡ ºñ°ßµÈ´Ù. ±º´ë¿¡¼ Ãѱâ¼öÀÔÀ» ÇÏ´Â °Í°úµµ °°°í Áý¿¡¼ ¼³°ÅÁö¸¦ ÇÏ´Â °Í°úµµ °°´Ù.
 | ¸®ÆÑÅ丵À̶õ |  |
Refactoring (Re + Factor + ing) ¿µ¾î ´Ü¾î¸¦ ¿ä¼Òº°·Î ³ª´²º¸¸é ¿ä¼ÒµéÀ» À籸¼ºÇÑ´Ù´Â ´µ¾Ó½º¸¦ ¹ÞÀ» ¼ö ÀÖ´Ù. ÀÌ´Â ¸¶Æ¾ ÆÄ¿ï·¯ÀÇ Ã¥¿¡¼ ºñ·ÔµÈ ´Ü¾îÀε¥, Ã¥¿¡ ÀÖ´Â ¸®ÆÑÅ丵ÀÇ Á¤ÀǸ¦ º¸¸é ´ÙÀ½°ú °°´Ù.
¡°¸®ÆÑÅ丵Àº ¿ÜºÎ µ¿ÀÛÀ» ¹Ù²ÙÁö ¾ÊÀ¸¸é¼ ³»ºÎ ±¸Á¶¸¦ °³¼±ÇÏ´Â ¹æ¹ýÀ¸·Î, ¼ÒÇÁÆ®¿þ¾î ½Ã½ºÅÛÀ» º¯°æÇÏ´Â ÇÁ·Î¼¼½ºÀÌ´Ù.¡± ¸¶Æ¾ ÆÄ¿ï·¯, ¸®ÆÑÅ丵, P10. ´ëûÃâÆÇ»ç
Ã¥¿¡ ÀÌ¾î¼ ³ª¿À´Â ³»¿ëÀº ¹ö±×°¡ ³¢¾îµéÁö ¾Êµµ·Ï ÁÖÀÇÇÏ¸é¼ Äڵ带 ÀÛ¼ºÇÑ ÈÄ¿¡ ´õ ³ªÀº µðÀÚÀÎÀ¸·Î °³¼±ÇÏ´Â ¹æ¹ýÀ̶ó°í ÇÑ´Ù. µðÀÚÀÎÀ» ¸ÕÀú ÇÑ ÈÄ Äڵ带 ¸¸µå´Â °ÍÀÌ ¾Æ´Ï¶ó ÀÏ´Ü µ¹¾Æ°¡´Â Äڵ带 ÀÛ¼ºÇϰí, ±× ÈÄ¿¡ ±× Äڵ尡 ´õ ÁÁÀº ±¸¼ºÀ» °®µµ·Ï ¹Ù²Û´Ù´Â °ÍÀÌ´Ù.
¿ì¸®µéÀÇ ÄÚµù °üÇàÀ» µ¹¾Æº¸¸é, ÀÏ´Ü µ¹¾Æ°¡´Â ÇÁ·Î±×·¥À» §´Ù. ±×¸®°í? ³¡ÀÌ´Ù. ±× ´ÙÀ½À¸·Î ³Ñ¾î°£´Ù. Á¤¸®? ³²Àº »ç¶÷ÀÌ ¾Ë¾Æ¼ ÇÒ °ÍÀÌ´Ù. ³²Àº »ç¶÷ÀÌ Àڱ⠹ۿ¡ ¾ø´Ù¸é? ³¯ Àâ¾Æ¼ Á¤¸®Çϰųª, ȸ»ç ¿Å±ä´Ù.
 | ¸®ÆÑÅ丵À» ÇÏ´Â ÀÌÀ¯ |  |
¾ß½ÉÂù ÃÊ±Þ °³¹ßÀÚ°¡ ÀÚÁÖÇÏ´Â °Í Áß¿¡ Çϳª°¡ ÀÌÀü ¼Ò½º¿¡ ´ëÇÑ ºñÆòÀÌ´Ù. ¡°µµ´ëü ¾î¶»°Ô ÀÌ·¸°Ô ¼Ò½º¸¦ © ¼ö ÀÖÁö. ¹ß·Î Â¥µµ À̰ͺ¸´Ù´Â ³´°Ú³×. ¿Ö ÀÌ·¸°Ô if else°¡ ¸¹Àº °Å¾ß. ÀÌ ¼Ò½º ÀÌÇØÇÒ ½Ã°£ ÀÖÀ¸¸é Â÷¶ó¸® ´Ù½Ã Â¥°í ¸¸´Ù.¡±±×·¡¼, ´Ù½Ã §´Ù.
±×¸®°í ¿ÀÇÂÇϸé ÀÌ°Í Àú°Í ¹ö±× ¸®Æ÷Æ®¿Í ¿ä±¸»çÇ×ÀÌ µé¾î¿Â´Ù. ÀÌ°Í Àú°Í ¿¹¿Ü 󸮸¦ ÇØÁÖ´Ù º¸¸é ³»°¡ § ÄÚµåÁö¸¸ º¸±â ½È¾îÁø´Ù. ¾î´À Á¤µµ ¼ºñ½º°¡ ¾ÈÁ¤ÀûÀ¸·Î µ¹¾Æ°¡µµ·Ï ¼Ò½º¸¦ ¼öÁ¤ÇØ ³õÀ¸´Ï, ÀÌ·±, Àü¿¡ ³»°¡ ¸· ¹¹¶ó°í Çß´ø ÀÌÀü °³¹ßÀÚÀÇ ¼Ò½º¿Í º°¹Ý Â÷À̰¡ ¾ø´Ù.
¡°Á¦±æ, ´ÙÀ½ ÈÄÀÓÀÌ ´©°¡ µÉÁö´Â ¸ô¶óµµ ³» ¿å ¹«ÁøÀå Çϰڱº.¡± ¹®¼¶óµµ Àß ÁÖ¸é ¸ð¸£°ÚÁö¸¸, óÀ½ °³¹ßÇÒ ¶§ º¸°íÇß´ø ¹®¼ ±×´ë·Î´Ù. ¿ä±¸»çÇ×°ú ¼öÁ¤À» ÅëÇØ¼ º¯°æµÈ ³»¿ëÀ» ¹®¼¿¡ ¾÷µ¥ÀÌÆ®ÇÏÁú ¸øÇß´Ù. ¡°ÇÒ ½Ã°£ÀÌ ÀÖ¾î¾ßÁö.¡±SM(System Maint enance)ºÐ¾ß¿¡¼´Â °ÅÀÇ ÀÌ·¸°Ô »ç´Â °ÍÀÌ º¸ÅëÀÌ´Ù.
ÀÌÀü »ç¶÷ÀÌ ¸¸µç ¼Ò½º¿¡¼ ¹ö¸± °ÍÀº °ÅÀÇ ¾ø´Ù. Á¤¸®°¡ ¾È µÇ¼ ¸î ´Þ°£ ¸ñ¿å ¸øÇÑ ¸ð½ÀÀÏ »ÓÀÌÁö, ó¸®ÇÒ ¼ö ÀÖ´Â ¸ðµç °æ¿ìÀÇ ¼ö´Â ±× ¾È¿¡ ´Ù °¡Áö°í ÀÖ´Ù. ÀÌ·± Äڵ带 »õ·Î §´Ù´Â °ÍÀº ±× ¸ðµç °æ¿ìÀÇ ¼ö¸¦ óÀ½ºÎÅÍ ´Ù½Ã °¨¼öÇϰڴٴ Àǹ̰¡ µÈ´Ù.
ÀÌÀü ¼Ò½º¸¦ ¾Ä±â°í ´Ùµë´Â °ÍÀÌ ¼Ò½º ¼öÁ¤À» À§ÇÑ Çʼö °úÁ¤ÀÌ´Ù. Á¤¸®ÇÏÁö ¾Ê°í °è¼ÓÇØ¼ ¼Ò½º¸¦ Ãß°¡ÇØ °¡´Â ÀÏÀº ¿îµ¿ÇÏÁö ¾Ê°í °è¼ÓÇØ¼ ¸Ô¾î´ë´Â °Í°ú °°ÀÌ ½Ã½ºÅÛÀ» ºñ¸¸»óÅ·Π¸¸µé¾î°£´Ù. ¿òÁ÷ÀÓÀÌ Á¡Â÷ µÐÇØÁú °ÍÀÌ´Ù. Á¤¸® ¾È µÈ ¹æÃ³·³ ¹ß µðµô ÆÀÀÌ ¾ø´Â ¼Ò½º°¡ µÉ °ÍÀÌ´Ù.
¹«¾ùÀΰ¡ ¼Ò½ºÀÇ º¯°æÀÌ ÇÊ¿äÇÒ ¶§, ±â´É Ãß°¡³ª »èÁ¦, ¼öÁ¤ ÀÛ¾÷ÀÌ ÀϾ ¶§ ¼Ò½ºÀÇ ¸®ÆÑÅ丵Àº Æ÷ÀåÀÌ»çó·³ ÆíÇÏ°Ô ÀÛ¾÷Çϵµ·Ï µµ¿ÍÁØ´Ù.
¸®ÆÑÅ丵Àº ¼Ò½ºÀÇ Áߺ¹µÈ ºÎºÐÀ» ¸ðµâÈ ½ÃÄÑÁØ´Ù. ¸ðµâÈ´Â ÀÔÃâ·ÂÀÌ ¸íÈ®Çϱ⠶§¹®¿¡ À̽ļºÀ» ³ô¿©ÁØ´Ù. Áߺ¹À» Á¦°ÅÇÑ´Ù´Â °ÍÀº ½Ã½ºÅÛÀÇ Ä®·Î¸®¸¦ »©´Â °Í°ú °°´Ù. ½Ã½ºÅÛÀÇ º¹Àâµµ, Áï Äڵ带 Àд »ç¶÷ÀÇ ¸Ó¸®°¡ ¿¹Þ´Â Á¤µµ¸¦ ³·ÃçÁØ´Ù. ¹°·Ð ±×·¸´Ù ÇØµµ ÀÌ»ç ÀÚü´Â ±ÍÂúÀº ÀÏÀÌ´Ù.
 | ¸®ÆÑÅ丵À» À§ÇÑ µµ±¸ |  |
¸®ÆÑÅ丵Àº ±×·Î ÀÎÇØ ¿µÇâ ¹Þ´Â ÇÁ·Î±×·¥ÀÇ ¼ö°¡ ÀûÀ» ´ë¿¡¸¸ ¼öÀÛ¾÷À¸·Î ÀÛ¾÷ÇØ¾ß ÇÑ´Ù. »ç½Ç ¸®ÆÑÅ丵À» ¼öÀÛ¾÷À¸·Î ÇÑ´Ù´Â °ÍÀº ÃßõÇÏÁö ¾Ê´Â´Ù. ÁÁÀº °³¹ß ȯ°æÀÌ Àִµ¥ »ç¼ °í»ýÇÒ Çʿ䰡 ¾ø´Â Å¿ÀÌ´Ù. ¸®ÆÑÅ丵À» À§ÇÑ ÁÁÀº ÅøÀÌ ¸¹ÀÌ ³ª¿Ô´Ù.
ÀÏ´Ü ÅëÇÕ°³¹ßȯ°æ(IDE, Integrated Development Environment)À» ÁغñÇÑ´Ù. ¿äÁòÀÇ ÀÚ¹Ù °³¹ß ½Ã ¸¹ÀÌ »ç¿ëµÇ´Â IDE´Â ±âº»ÀûÀ¸·Î ¸®ÆÑÅ丵À» Áö¿øÇÑ´Ù.
¸®ÆÑÅ丵°ú ÇÔ²² ÁøÇàµÇ¾î¾ß ÇÒ JUnit Å×½ºÆ®ÄÉÀ̽º ÀÚµ¿ »ý¼ºµµ °°ÀÌ Áö¿øµÇ°í ÀÖ´Ù. ¸®ÆÑÅ丵 ÀÛ¾÷À» ÇÒ °æ¿ì ¿©·¯ ÁÙÀÇ ÄÚµåµéÀÌ ¼öÁ¤µÈ´Ù. À̶§ ¿µÇâÀ» ¹Þ´Â ÇÁ·Î±×·¥µéÀ» ¸ðµÎ ºÒ·¯³»¼ ¼öÀÛ¾÷À¸·Î ¼öÁ¤ÇÒ °æ¿ì ¸®ÆÑÅ丵¿¡ ´ëÇÑ °ø¼ö°¡ ¸¹ÀÌ ÇÊ¿äÇÑ Å¿¿¡ °¨È÷ ¸®ÆÑÅ丵¿¡ ´ëÇÑ ¾öµÎ¸¦ ³¾ ¼ö ¾ø´Ù.
ÇÏÁö¸¸ ¿äÁò ÅëÇÕ °³¹ß ȯ°æÀ» Áö¿øÇÏ´Â °³¹ß µµ±¸µéÀº º¯°æ ¹Þ´Â ÆÄÀϵéÀÇ ¸ñ·Ï°ú º¯°æ Àü ÈÄÀÇ ÄÚµå ºñ±³, ÀÚµ¿ º¯°æ ±â´ÉÀ» Áö¿øÇÑ´Ù. ´öºÐ¿¡ ¸®ÆÑÅ丵¿¡ µå´Â ¼ö°í°¡ ÀüÇô ¼ö°í·Î »ý°¢µÇÁö ¾ÊÀ» Á¤µµ´Ù.
 | ¸®ÆÑÅ丵 ÁøÇà ¹æ¹ý |  |
¸®ÆÑÅ丵ÇÏ´Â ÀÌÀ¯¿Í ¸®ÆÑÅ丵 µµ±¸±îÁö ¾Ë¾Æº¸¾ÒÀ¸´Ï ÀÌÁ¦ ¸®ÆÑÅ丵 ¹æ¹ý¿¡ ´ëÇØ ¾Ë¾Æº¼ Â÷·Ê´Ù. ÁÖÀú¸® ÁÖÀú¸® ¹æ¹ýµéÀ» ´Ã¾î³õÀ» ¼ö µµ ÀÖ°ÚÁö¸¸ °³¹ßÀÚ´Â ÄÚµå·Î ¾ê±âÇÑ´Ù. ¹Ù·Î ÀÌŬ ¸³½º¿¡¼ ¸®ÆÑÅ丵À» »ç¿ëÇÏ´Â ¹æ¹ýÀ» ¼³¸íÇϵµ·Ï ÇÏÀÚ.
| |
1 public void deleteArticle(Connection conn, int
seq) throws SQLException {
2 if (conn == null)
3 return;
4
5 // db¿¡¼ »èÁ¦ - »èÁ¦ Å×À̺í·Î À̵¿
6 PreparedStatement pstmt = null;
7 pstmt =
conn.prepareStatement(QUERY_MOVE);
8 pstmt.setInt(1, seq);
9 pstmt.executeUpdate();
10
11 pstmt.close();
12
13 pstmt =
conn.prepareStatement(QUERY_DELETE);
14 pstmt.setInt(1, seq);
15 pstmt.executeUpdate();
16
17 pstmt.close();
18
19 // memo »èÁ¦ »ý·«
20
21 }
| |
 |
¸®ÆÑÅ丵¿¡ ´ëÇÑ °£´ÜÇÑ ¿¹¸¦ µé±â À§Çؼ <¸®½ºÆ® 1>À» º¸¸ç ¼³¸íÇϰڴÙ. 7~11¹ø ÁÙÀÇ Äڵ尡 13~17¹ø ÁÙÀÇ ÄÚµå¿Í À¯»çÇÑ °ÍÀ» ¾Ë ¼ö ÀÖ´Ù. Áߺ¹ÀÌ °è¼ÓµÇ´Â °ÍÀº ÀÏÁ¤ÇÑ ÆÐÅÏÀ» °®°í Àִµ¥ Áߺ¹ÀÌ ½ÉÇØÁö¸é ÆÐÅÏ º¯°æ¿¡ µû¸¥ °ø¼ö°¡ ¸¹ÀÌ ÇÊ¿äÇϹǷΠ¼Ò½ºÀÇ À¯¿¬¼ºÀÌ ¶³¾îÁö°Ô µÈ´Ù. ¶§¹®¿¡ ¹Ýº¹µÇ´Â ÆÐÅÏÀ» ¸Þ¼ÒµåÈ ½ÃÄѼ ½±°Ô Äڵ带 ÀÐÀ» ¼ö ÀÖµµ·Ï ÇÑ´Ù.
 |
| <ȸé 1> ¹Ýº¹µÇ´Â ºÎºÐ, ¸Þ¼Òµå ÃßÃâÀÇ ´ë»ó |
ÀÌŬ¸³½º¿¡¼ ÆÐÅϺκÐÀ» ¼±ÅÃÇϰí, ¿À¸¥ÂÊ ¹öưÀ» ´·¯ ÄÜÅØ½ºÆ® ¸Þ´º¸¦ ¿¸é Áß°£ À§Ä¡¿¡ [Refactor¡¦]¶ó´Â ¸Þ´º°¡ º¸ÀδÙ. È®Àå ¸Þ´º¿¡¼ [Extract Method¡¦]¸¦ ¼±ÅÃÇϸé <ȸé 2>¿Í °°Àº ´ÙÀ̾ó·Î±× âÀÌ ¶á´Ù. ¡®doQuery¡¯¶ó°í ¸Þ¼Òµå¸íÀ» ÀÔ·ÂÇÑ µÚ¿¡ ÆÄ¶ó¹ÌÅ͵éÀ» È®ÀÎÇÑ´Ù.
 |
| <ȸé 2> ¸Þ¼Òµå ÃßÃâ(Extract Method) |
È¸é ¾Æ·¡ÂÊÀÇ ¹öư Áß [Preview]¸¦ Ŭ¸¯Çϸé <ȸé 3>°ú °°ÀÌ ¹Ì¸®º¸±â âÀ¸·Î ¹Ù²ï´Ù. À̶§ ȸ鿡 Ç¥½ÃµÇ´Â Á¤º¸µéÀÌ ±â°¡ ¸·Èù´Ù. ¸®ÆÑÅ丵À» ÅëÇØ¼ º¯°æµÇ´Â ¼Ò½ºÀÇ ºñ±³¿Í »ó´Ü¿¡´Â ÀÌ ¸®ÆÑÅ丵¿¡ ¿µÇâÀ» ¹Þ´Â ¼Ò½ºµé°ú ¸Þ¼Òµå¸í±îÁö Ä£ÀýÇÏ°Ô ¾Ë·ÁÁØ´Ù. °Ô´Ù°¡ ÀÌŬ¸³½º°¡ ¸ðµÎ ´Ù ÀÚµ¿À¸·Î ¹Ù²ãÁØ´Ù.
 |
| <ȸé 3> ¸®ÆÑÅ丵 °á°ú ¹Ì¸®º¸±â |
<ȸé 4>¿¡¼´Â ´ÙÀ̾ó·Î±×¿¡¼ ¸¸µç doQuery() ¸Þ¼ÒµåÀÇ ³»¿ëÀ» º¼ ¼ö ÀÖ´Ù. ¼Ò½º ºñ±³¶õÀÇ ¸Ç ¿À¸¥ÂÊ¿¡ ÀÖ´Â ³×¸ð´Â ¼Ò½º Àüü¿¡¼ º¯°æÀÌ ÀÏ¾î³ ºÎºÐÀ» Ç¥½ÃÇÑ °ÍÀÌ´Ù.
 |
| <ȸé 4> ¸®ÆÑÅ丵À¸·Î¸¸µé¾îÁø ¸Þ¼Òµå |
ºñ±³°¡ ³¡³µ´Ù¸é [OK] ¹öưÀ» Ŭ¸¯Çؼ ¸®ÆÑÅ丵À» ½ÇÇàÇÑ´Ù. ¼Ò½º ¸®ÆÑÅ丵À» ¸¶Ä£ µÚ¿¡ doQuery() ¸Þ¼Òµå¸¦ º¸¸é, <ȸé 5>ó·³ ÆÄ¶ó¹ÌÅͰ¡ Connection conn, int seq µÎ °³ÀÓÀ» ¾Ë ¼ö Àִµ¥, ¿©±â¿¡ Çϳª°¡ ´õ ÇÊ¿äÇÏ´Ù. ¹Ù·Î Äõ¸® ºÎºÐÀε¥, À̰ÍÀ» ÆÄ¶ó¹ÌÅÍ·Î ¹Þ¾Æ¾ß ºñ·Î·Î doQuery()°¡ °ø¿ëÀ¸·Î ¾²ÀÏ ¼ö ÀÖ°Ô µÈ´Ù.
 |
| <ȸé 5> ¸®ÆÑÅ丵À¸·Î ¸¸µé¾îÁø ¾à°£ ¾Æ½¬¿î ¸Þ¼Òµå |
QUERY_MOVE¶ó´Â »ó¼ö¸¦ ÆÄ¶ó¹ÌÅÍ·Î ´ëÄ¡ÇÑ´Ù. ÀÌ »ó¼ö¿¡ ¸¶¿ì½º ¿À¸¥ÂÊ ¹öưÀ» Ŭ¸¯ÇÑ µÚ¿¡ [Refactor]-[Introduce Parameter] ¸Þ´º¸¦ ½ÇÇà½Ã۸é <ȸé 6>°ú °°Àº ´ÙÀ̾ó·Î±× âÀ» º¼ ¼ö ÀÖ´Ù.
»õ·Î¿î ÆÄ¶ó¹ÌÅÍ À̸§À» ¡®query¡¯·Î Á¤ÇÏ°í ¿ìÃøÀÇ [up] ¹öưÀ» Ŭ¸¯Çؼ ÆÄ¶ó¹ÌÅÍÀÇ À§Ä¡¸¦ Á¶Á¤ÇÑ´Ù. ÆÄ¶ó¹ÌÅÍÀÇ º¯°æÀº ¸Þ¼ÒµåÀÇ ¸ð½ÀÀÎ ½Ã±×´Ïó(signature)¸¦ º¯°æÇÏ´Â °ÍÀÌ´Ù.
 |
| <ȸé 6> ÆÄ¶ó¹ÌÅÍ·Î ¸¸µé±â |
¸¶Âù°¡Áö·Î [Preview] ¹öưÀ» Ŭ¸¯Çϸé <ȸé 7>°ú °°ÀÌ ¸®ÆÑÅ丵 ÀüÈÄÀÇ ¼Ò½º¸¦ ºñ±³ÇÒ ¼ö ÀÖ´Ù.
 |
| <±×¸² 7> ÆÄ¶ó¹ÌÅÍ·Î ¸¸µé±â Àû¿ëÇϱâ Àü ¹Ì¸®º¸±â |
<±×¸² 7>¿¡¼ [OK] ¹öưÀ» Ŭ¸¯Çؼ ¸¸µé¾îÁø doQuery() ¸Þ¼Òµå´Â ¹Ýº¹µÇ´Â Äõ¸® ½ÇÇà ºÎºÐÀ» ¸Þ¼Òµå ÃßÃâ(Extract Method)°ú ÆÄ¶ó¹ÌÅÍ·Î »©±â(Introduce Parameter) ¸®ÆÑÅ丵À» ÀÌ¿ëÇØ¼ ¸¸µç °ÍÀÌ´Ù. <¸®½ºÆ® 2>´Â ±×°ÍÀ» ÀÌ¿ëÇØ¼ ¹Ù²ï ¼Ò½ºÀÇ ¸ð½ÀÀÌ´Ù.
| <¸®½ºÆ® 2> QUERY_DELETE ºÎºÐ ¸®ÆÑÅ丵 °úÁ¤ | | | |
1 public void deleteArticle(Connection conn, int seq) throws SQLException {
2 if (conn == null)
3 return;
4
5 // db¿¡¼ »èÁ¦ - »èÁ¦ Å×À̺í·Î À̵¿
6 PreparedStatement pstmt;
7 doQuery(conn, QUERY_MOVE, seq);
8 doQuery(conn, QUERY_DELETE, seq);
9
10 pstmt = conn.prepareStatement(QUERY_DELETE);
11 pstmt.setInt(1, seq);
12 pstmt.executeUpdate();
13
14 pstmt.close();
15
16 // memo »èÁ¦ »ý·«
17
18 }
¡¦
19 private void doQuery(Connection conn, String query, int seq) throws SQLException {
20 PreparedStatement pstmt = null;
21 pstmt = conn.prepareStatement(query);
22 pstmt.setInt(1, seq);
23 pstmt.executeUpdate();
24
25 pstmt.close();
26 }
| |
 |
<¸®½ºÆ® 2>´Â ¾ÆÁ÷ º¯°æ ÁßÀÎ »ùÇÃÄÚµåÀÌ´Ù. ¾Õ¼ ¸¸µç doQuery() ¸Þ¼Òµå¸¦ ÀÌ¿ëÇØ¼ Äõ¸®¸¸ ´Ù¸¥ °ÍÀ» º¸³»¸é µÈ´Ù. ÇÊÀÚ°¡ Ãß°¡ÇÑ 8¹ø ÁÙÀº 10~14¹ø ÁÙ°ú µ¿ÀÏÇÑ ±â´ÉÀ» ¼öÇàÇÏ°Ô µÈ´Ù. Äڵ带 Á¤¸®ÇÏ¸é ´ÙÀ½°ú °°ÀÌ µÈ´Ù.
| <¸®½ºÆ® 3> QUERY_DELETE ºÎºÐ ¸®ÆÑÅ丵 ÈÄ | | | |
1 public void deleteArticle(Connection conn, int seq) throws SQLException {
2 if (conn == null)
3 return;
4
5 // db¿¡¼ »èÁ¦ - »èÁ¦ Å×À̺í·Î À̵¿
6 doQuery(conn, QUERY_MOVE, seq);
7 doQuery(conn, QUERY_DELETE, seq);
8 // memo »èÁ¦ »ý·«
9
10 }
| |
 |
ÇÏ´ÜÀÇ ±¸¹®ÀÌ Áö¿öÁö¸é¼ ÀÌ deleteArticle() ¸Þ¼Òµå ³»ÀÇ PreparedStatement pstmt ¼±¾ðÀº ºÒÇÊ¿äÇϱ⠶§¹®¿¡ »èÁ¦Çß´Ù. óÀ½ º¸¾Ò´ø ¼Ò½º¿¡¼ ¸¹ÀÌ Á¤¸®µÇ¾ú´Ù. Á¤¸®¸¦ ÇÏ°í º¸´Ï deleteArticle() ¸Þ¼Òµå¸¦ È£ÃâÇÏ´Â °÷¿¡¼ ºñ½ÁÇÑ ±â´ÉÀ» ÇÏ´Â ºÎºÐÀ» º¼ ¼ö ÀÖ´Ù.
| <¸®½ºÆ® 4> ¸®ÆÑÅ丵 Àû¿ë ¹üÀ§ È®´ë | | | |
1 // password È®ÀÎ
2 if (confirmPassword.equals(MASTER_PASSWORD)
3 || confirmPassword.equals(article.getPassword())) {
4 deleteArticle(conn, seq);
5 deleteFiles(conn, seq);
6 } else {
7 resourceName = "/jsp/error.jsp";
8 throw new Exception(CommonUtil.k2a("À߸øµÈ ºñ¹Ð¹øÈ£"))
9 }
¡¦
10 public void deleteFiles(Connection conn, int seq) throws SQLException {
11 if (seq == 0){
12 return;
13 }
14
15 // file db¿¡¼ »èÁ¦ - sts °ª 0 ·Î º¯°æ
16 PreparedStatement pstmt = conn.prepareStatement(QUERY_DEL_SEQ_FILE);
17 pstmt.setInt(1, seq)
18 pstmt.executeUpdate();
19
20 pstmt.close();
21
22 // file »èÁ¦ »ý·«
23 }
| |
 |
<¸®½ºÆ® 4>ÀÇ 16~20¹ø ÁÙÀ» º¸¸é ¾Õ¼ ÃßÃâÇÑ ¸Þ¼Òµå doQuery()·Î º¯°æÇÒ ¼ö ÀÖÀ» °Í °°´Ù. ±×·³ ÄÚµå´Â <¸®½ºÆ® 5>¿Í °°ÀÌ ¼öÁ¤µÉ °ÍÀÌ´Ù.
| <¸®½ºÆ® 5> QUERY_DEL_SEQ_FILE ºÎºÐ ¸®ÆÑÅ丵 °úÁ¤ | | | |
¡¦
10 public void deleteFiles(Connection conn, int seq) throws SQLException {
11 if (seq == 0){
12 return;
13 }
14
15 // file db¿¡¼ »èÁ¦ - sts °ª 0 ·Î º¯°æ
16 doQuery(conn, QUERY_DEL_SEQ_FILE, seq);
17
18 // file »èÁ¦ »ý·«
19 }
| |
 |
ÀÌ·¸°Ô Á¤¸®ÇÏ°í ³ ÈÄ¿¡ ´Ù½Ã ÀüüÀûÀÎ Äڵ带 »ý°¢Çغ¸¸é µÎ °³ÀÇ ¸Þ¼Òµå°¡ ºÒÇÊ¿äÇÏ´Ù »ý°¢ÀÌ µç´Ù. Áï <¸®½ºÆ® 6>°ú °°ÀÌ deleteArticles()¿Í deleteFiles() ¸Þ¼Òµå¸¦ Áö¿ì°í ¹Ù·Î doQuery() ¸¦ È£ÃâÇϵµ·Ï ¹Ù²Ü ¼ö ÀÖÀ» °ÍÀÌ´Ù. <¸®½ºÆ® 6>Àº ¸®ÆÑÅ丵À» ÅëÇØ ÃÖÁ¾ÀûÀ¸·Î Á¤¸®µÈ ¼Ò½ºÀÌ´Ù.
| <¸®½ºÆ® 6> ¸®ÆÑÅ丵 Àû¿ëÀ¸·Î °³¼±µÈ ÄÚµå | | | |
1 // password È®ÀÎ
2 if (confirmPassword.equals(MASTER_PASSWORD)
3 || confirmPassword.equals(article.getPassword())) {
4 // db¿¡¼ »èÁ¦ - »èÁ¦ Å×À̺í·Î À̵¿
5 doQuery(conn, QUERY_MOVE, seq);
6 doQuery(conn, QUERY_DELETE, seq);
7 // memo »èÁ¦ »ý·«
8 // file db¿¡¼ »èÁ¦ - sts °ª 0 ·Î º¯°æ
9 doQuery(conn, QUERY_DEL_SEQ_FILE, seq);
10 // file »èÁ¦ »ý·«
11 } else {
12 resourceName = "/jsp/error.jsp";
13 throw new Exception(CommonUtil.k2a("À߸øµÈ ºñ¹Ð¹øÈ£"));
14 }
| |
 |
¾Õ¿¡¼ º¸¾Ò´ø ¼Ò½ºÀÇ if else ±¸¹®°ú ºñ±³Çغ¸¸é doQuery() ¶ó´Â °øÅëÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Â ¸Þ¼Òµå¿Í 5ÁÙÀÌ ´Ã¾î³µÁö¸¸ deleteArticle(), deleteFiles() µÎ °³ÀÇ ¸Þ¼Òµå°¡ »ç¶óÁ³´Ù. ÀÌÀü ¼Ò½º¿Í ºñ±³Çغ¸¸é ¸Þ¼Òµå ±¸¼ºÀº <ȸé 8>°ú °°ÀÌ º¯°æµÇ´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù.
 |
| <±×¸² 8> ¸®ÆÑÅ丵 Àü ÈÄ ¸Þ¼Òµå ºñ±³ |
Ãß°¡µÈ ¸Þ¼Òµå´Â +È»ìÇ¥, Á¦°ÅµÈ ¸Þ¼Òµå´Â –È»ìÇ¥·Î Ç¥½ÃµÇ°í º¯°æµÈ ¸Þ¼Òµå´Â ±×³É °ËÀº È»ìÇ¥·Î Ç¥½ÃµÈ´Ù. È¸é ¾Æ·¡ÂÊ¿¡ Ç¥½ÃµÇ´Â ¼Ò½º ºñ±³ÇÏ´Â °÷À» º¸¸é ´õ¿í ¸íÈ®ÇÏ°Ô ¾Ë ¼ö ÀÖ´Ù.
Áö±Ý±îÁö »ùÇà ¼Ò½ºÀÇ ±¸Á¶¸¦ °³¼±ÇÏ¸é¼ µÎ °¡Áö ¸®ÆÑÅ丵 ±â¹ý¿¡ ´ëÇØ ¾Ë¾Æº¸¾Ò´Ù. ÀÌ ¿Ü¿¡µµ ¸¹Àº ±â¹ýµéÀÌ ¸®ÆÑÅ丵 Ã¥¿¡ ¼Ò°³µÇ¾îÀÖ°í, ÀÌŬ¸³½º¿¡µµ ´õ ¸¹Àº ¸®ÆÑÅ丵 ±â´ÉÀÌ Áö¿øµÈ´Ù.
 | ¸®ÆÑÅ丵 °æÇè´ã |  |
ÇÊÀÚ´Â ÀÌ ±ÛÀ» ¾²°í ÀÖ´Â Áö±Ý Å« ÇÁ·ÎÁ§Æ®¸¦ ÁøÇàÇϰí ÀÖ´Ù. 6³â°£ Çϳªµµ ¹ö·ÁÁöÁö ¾Ê°í ¿î¿µµÇ¸é¼ À̸®Àú¸® ÆÐÄ¡µÈ ÆäÀÌÁö¸¦ ½ºÇÁ¸µ ÇÁ·¹ÀÓ¿öÅ©¿¡ ¸ÂÃç¼ ¹Ù²Ù´Â ÀÛ¾÷ÀÌ´Ù. ±×·±µ¥, ÀÛ¾÷À» ÇÏ´Â µ¿¾È ÇÊÀÚ°¡ °£°úÇÑ °ÍÀÌ ÀÖ¾ú´Ù. ±×·¸°Ô º¹ÀâÇÏ°Ô ¾ôÈ÷°í¼³Å² ÆäÀÌÁö¸¦ ½ºÇÁ¸µ ÇÁ·¹ÀÓ¿öÅ©ÀÇ »õ·Î¿î ¹Ù´ÚºÎÅÍ Çϳª¾¿ ½×¾Æ ¿Ã¸° °ÍÀÌ´Ù.
±âÁ¸¿¡ ¿î¿µÇϰí ÀÖ´Â ¼Ò½º¿¡¼ Çϳª¾¿ ¶â¾î¼ »õ·Î¿î Åä¾çÀ¸·Î ¿Å°Ü½É±â¸¦ ÇÑ °ÍÀÌ´Ù. À̰ÍÀº Àç°³¹ß¿¡ °¡±î¿î °ÍÀ̾ú°í, ±²ÀåÈ÷ ¸¹Àº ½Ã°£ÀÌ ÇÊ¿äÇß´Ù. ¸¸¾à ¿Å°Ü¾ß ÇÒ ¼Ò½º¸¦ ±âÁ¸ÀÇ Åä¾ç À§¿¡¼ Á¶±Ý¾¿ ¸®ÆÑÅ丵ÇÑ ÈÄ¿¡ ¿Å°å´Ù¸é ¿ÀÈ÷·Á ¸¹Àº ½Ã°£À» Àý¾àÇÒ ¼ö ÀÖ¾úÀ» °ÍÀÌ´Ù.
½Ç¼öÇß´Ù°í »ý°¢ÇÏ´Â ºÎºÐÀº ´ÙÀ½°ú °°´Ù. ¿ì¼±ÀûÀ¸·Î ¸ðµç ±â´ÉÀ» ´Ù ¿Å°Ü¿Ã ¶§±îÁö ½Å±Ô ÆäÀÌÁö´Â ¾ÆÁ÷ ¹Ì¿Ï¼ºÀÌ´Ù. ÇÏÁö¸¸ ±âÁ¸ÀÇ ÆäÀÌÁö ³»¿¡¼ ¸®ÆÑÅ丵À» ÇÑ´Ù°í Çϸé ÀÌ¹Ì ¸ðµç ±â´É°ú µ¥ÀÌÅ͸¦ ´Ù °®°í ÀÖ´Â »óÅÂÀÌ´Ù. ´Ù¸¥ ÆÄÆ®¿¡¼ µ¥ÀÌÅͰ¡ ÇÊ¿äÇÏ´Ù°í ÇÒ ¶§¿¡µµ ÇöÀç °®°í ÀÖ´Â µ¥ÀÌÅÍ¿¡¼ µ¥ÀÌÅ͸¦ »Ì¾Æ³»¼ º¸´Ù »¡¸® Àü´ÞÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
µÎ ¹øÂ°·Î ½Ã°£ÀÇ ¾Ð¹ÚÀÌ´Ù. ±âÁ¸ÀÇ ÆäÀÌÁö´Â ¾ðÁ¦µçÁö ´äÀÌ ³ª¿Â´Ù. ÇÏÁö¸¸ ½Å±ÔÆäÀÌÁö´Â ¸ðµç Å×½ºÆ®¸¦ ¸¶Ä¥ ¶§±îÁö °è¼Ó ±â´Ù¸®¶ó°í ¾ê±âÇØ¾ß¸¸ ÇÑ´Ù. ¹Ù´ÚºÎÅÍ ¸ðµç °Íµé¿¡ ´ëÇØ¼ Å×½ºÆ®¸¦ ¸¸µé¾î¾ß ÇÏ´Â Å¿¿¡ ´õ ¸¹Àº Å×½ºÆ® ÄÚµåµéÀÌ ÇÊ¿äÇÏ´Ù. ¿©±â¿¡µµ ¸¸¸¸Ä¡ ¾ÊÀº ½Ã°£ÀÌ ÅõÀԵȴÙ.
¼¼ ¹øÂ°´Â ¾ÖÇø®ÄÉÀ̼ǿ¡ ´ëÇÑ ÀڽۨÀÌ ¶³¾îÁø´Ù´Âµ¥ ÀÖ´Ù. ¸Æ°¡À̹öµµ ¾Æ´Ñµ¥ ½Ã°£¿¡ Âѱâ¸é¼ °³¹ßÇÒ °æ¿ì ¸¸µé¾îÁø ¼Ò½º´Â ºÐ¸íÈ÷ ¼ö¸¹Àº ¹ö±×¸¦ ǰ°í ÀÖÀ» °¡´É¼ºÀÌ ³ô´Ù. ±× °ªÀÌ Àý´ë Á¤È®ÇÏ´Ù°í À̾߱âÇϱâ Èûµé´Ù. ÇÏÁö¸¸ ¸®ÆÑÅ丵À» ÅëÇØ¼ ³»ºÎ·ÎºÎÅÍ °³ÇõÇØ ³ª°¥ °æ¿ì ºüÁø °Í ¾øÀÌ ¼Ò½º¸¦ À籸¼ºÇÒ ¼ö Àֱ⠶§¹®¿¡ ¾ÈÁ¤µÈ ±â¹Ý¿¡¼ ÀÛ¾÷ÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
Àü»êÀÇ ºÒ¹®À² °¡¿îµ¥ À¯¸íÇÑ °ÍÀÌ Çϳª ÀÖ´Ù. ¡®Àß µ¹¾Æ°¡´Â °ÍÀº ¼Õ´ëÁö ¸¶¶ó.¡¯ Ä®Åð±ÙÀ» À§Çؼ Àý´ë Àý¸íÀ¸·Î ÇÊ¿äÇÑ ¸»ÀÌ´Ù. ÀÌ·¸°Ô °ü¸®µÇ´Â ¼ÒÇÁÆ®¿þ¾îÀÇ Ç°ÁúÀº ³íÇϱâ Èûµé´Ù. ±×³É ¸Ô°í »ì±â À§ÇÑ ÇÁ·Î±×·¥°ú ±×°ÍÀ» °ü¸®ÇÏ´Â Á÷ÀåÀÎÀÌ µÇ¾î¹ö¸®°Ô µÈ´Ù. ¹Ý¸é¿¡ ¸®ÆÑÅ丵ÀÇ ±âº» »ç»óÀº °³¼±À» À§ÇÑ ³ë·ÂÀÌ´Ù.
¸·¹«°¡³» °³¼±ÀÌ ¾Æ´Ï¶ó Çö¸íÇÑ °³¼±À» À§ÇÑ ¹æ¹ýÀ» Á¦½ÃÇϰí ÀÖ°í, Ä£±¸°ÝÀÎ Å×½ºÆ® ÄÉÀ̽º°¡ ±× ¾ÈÀüÀåÄ¡°¡ µÇ¾î ÁØ´Ù. ÇÑ ¼ø°£ÀÇ Ç°ÁúÀÌ ¾Æ´Ñ Áö¼ÓÀûÀÎ ¼ÒÇÁÆ®¿þ¾îÀÇ °Ç°À» »ý°¢ÇÑ´Ù¸é ²ÙÁØÈ÷ ¸®ÆÑÅ丵À¸·Î ¼ÕÁúÇÒ Çʿ䰡 ÀÖ´Ù. ±×°ÍÀÌ ³¡¾øÀÌ º¯ÇÏ´Â À¥ ¾ÖÇø®ÄÉÀ̼ǰú °°Àº ¼ÒÇÁÆ®¿þ¾îÀÏ °æ¿ì´Â ´õ¿í ±×·¸´Ù.
°³¼±À» À§ÇÑ ÀÛÀº ¸öÁþ¿¡ ÁøÁ¤ÇÑ ÇÁ·Î±×·¡¸Ó°¡ µÇ°í ½ÍÀº µ¶ÀÚµéÀ» ÃÊ´ëÇÑ´Ù. @
Âü°íÀÚ·á
1. ¸®ÆÑÅ丵, ¸¶Æ¾ÆÄ¿ï·¯, À±¼ºÁØ,Á¶Àç¹Ú ¿ª, ´ëû, 2002³â3¿ù
2. ÆÐÅÏÀ» Ȱ¿ëÇÑ ¸®ÆÑÅ͸µ, ÁÒ½´¾Æ Äɸ®¿¡ºê½ºÅ°, À±¼ºÁØ,Á¶»ó¹Î ¿ª, ÀλçÀÌÆ®, 2006³â7¿ù
¸®ÆÑÅ丵 °ü·Ã »çÀÌÆ®
1. http://www.refactoring.com/Refactoring Home Page
2. http://xper.org/wiki/xp/ReFactoring ±èâÁØ ´ÔÀÇ Refactoring¿¡ °üÇÑ Á¤º¸
3. http://c2.com/cgi/wiki?CodeSmell Code Smell
4. http://xper.org/wiki/xp/CodeSmell Code Smell ¹ø¿ª
5. http://www.okjsp.pe.kr/lecture/ide/eclipse/refactor/eclipse_refactoring.html EclipseÀÇ refactoring±â´É
6. http://www.okjsp.pe.kr/lecture/ide/eclipse/eclipse_install.html Eclipse ½ÃÀÛÇϱâ
* ÀÌ ±â»ç´Â ZDNet KoreaÀÇ Á¦ÈÞ¸ÅüÀÎ ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®¿þ¾î¿¡ °ÔÀçµÈ ³»¿ëÀÔ´Ï´Ù.