[Áöµð³ÝÄÚ¸®¾Æ]¿À·¡ Àü Áú·¹Æ®°¡ ¿©·¯ ºÐ¾ß·Î »ç¾÷À» ´Ù°¢ÈÇÑ ÀûÀÌ ÀÖ´Ù. ÀÚ½ÅÀÇ °æÀï·Â ÀÖ´Â ºÐ¾ßÀÎ ¸éµµ³¯, ¸éµµ±â »ç¾÷À» ¹þ¾î³ª ¼¤Çª µî ÀÏ¿ëǰ »ç¾÷¿¡±îÁö ¶Ù¾îµç °ÍÀÌ´Ù. ¸éµµ¿ëǰµµ ÀÏ¿ëǰÀÌ´Ï »ç¾÷ºÐ¾ß °£ ½Ã³ÊÁö È¿°ú°¡ ÀÖÀ» °ÍÀ̶ó´Â ÆÇ´ÜÀ̾ú´ø µíÇÏ´Ù.
ÇÏÁö¸¸ ½ÇÀûÀº ³ªÁö ¾Ê¾Ò°í ÁÖ°¡´Â °ïµÎ¹ÚÁúÃÆÀ¸¸ç °á±¹Àº ¸¹Àº ¼Õ½ÇÀ» ÀÔÀº ä·Î ´Ù°¢ÈÇÑ »ç¾÷ºÐ¾ß¸¦ Á¤¸®Çؾ߸¸ Çß´Ù. ÇöÀç´Â ¸éµµ¿ëǰ »ç¾÷¿¡ ÁýÁßÇØ¼ ¼¼°è ÃÖ°íÀÇ ¸éµµ¿ëǰ ȸ»ç¶ó´Â ¸í¼º°ú ½ÇÀûÀ» µÇã°Ô µÇ¾ú´Ù.
ÀÌó·³ ¸¹Àº ±â¾÷µéÀÌ À§ÇèÀ» ºÐ»ê½ÃŰ°í ½ÇÀûÀ» Çâ»ó½Ã۱â À§Çؼ ´Ù°¢È(diversification)¸¦ ÇÑ´Ù. ÇÏÁö¸¸ ¸¹Àº °æ¿ì ´Ù°¢È´Â ¿ÀÈ÷·Á À§ÇèÀ» Áõ°¡½ÃŰ°í ½ÇÀûÀ» ¾ÇȽÃŲ´Ù. À̸¦ µé¾î ¿ù ½ºÆ®¸®Æ®ÀÇ Àü¼³ÀûÀÎ ÅõÀÚ°¡·Î ºÒ¸®´Â ÇÇÅÍ ¸°Ä¡(Peter Lynch)´Â ¡°´Ù°¢È´Â ´ëºÎºÐ ´Ù¾ÇÈ(diworsfication)·Î ³¡³´Ù¡±°í Ãæ°íÇÑ´Ù. ½ÇÁ¦ ±×´Â ÀÚ½ÅÀÇ Æ÷Æ®Æú¸®¿À¿¡ ´Ù°¢È¸¦ ½ÃµµÇÏ´Â ±â¾÷Àº °¡´ÉÇÑ ¹èÁ¦Çϸç, °æÇè»ó ÀÌ·¯ÇÑ °áÁ¤À» ÈÄȸÇÑ ÀûÀº °ÅÀÇ ¾ø´Ù°í ÀڽŠÀÖ°Ô ¸»ÇÑ´Ù.
½ºÅÄÆ÷µåÀÇ Áü Äݸ°½º ±³¼ö´Â ÇÇÅÍ ¸°Ä¡ÀÇ °æÇèÀ» Æ®·° ¼ö½Ê ´ë¿¡ ÇØ´çÇÏ´Â ÀڷḦ ºÐ¼®ÇÑ °á°ú·Î ÁöÁöÇØ ÁØ´Ù. ±×ÀÇ ¿¬±¸¿¡ µû¸£¸é À§´ëÇÑ ±â¾÷À¸·Î µµ¾àÇÑ ±â¾÷µéÀº ¸ðµÎ°¡ ¿ìÁ÷ÇÏ°Ô ÇÑ ¿ì¹°À» ÆÍ´Ù°í ÇÑ´Ù. ´ÙÀ½Àº ±×°¡ "ÁÁÀº ±â¾÷¿¡¼ À§´ëÇÑ ±â¾÷À¸·Î"¶õ Ã¥¿¡¼ ¡®¿¹»óÄ¡ ¸øÇÑ ¹ß°ß¡¯À̶ó ³î¶ó¸ç ¼¼úÇÑ ³»¿ëÀÌ´Ù.
¡°ÁÁÀº ȸ»ç¿¡¼ À§´ëÇÑ È¸»ç·Î µµ¾àÇÑ ±â¾÷µéÀº °í½¿µµÄ¡ - ¡®ÇÑ °¡Áö¡¯¸¸ ¾Ë°í ±×°Í¿¡ ÁýÁßÇÏ´Â ´Ü¼øÇϰí Ã̽º·¯¿î µ¿¹°-¿¡ °¡±õ´Ù. ºñ±³ ±â¾÷µéÀº ¿©¿ì - ¸¹Àº °ÍÀ» ¾ËÁö¸¸ Àϰü¼ºÀÌ °á¿©µÈ ²Ò ¸¹°í ±³È°ÇÑ µ¿¹°-¿¡ °¡±õ´Ù.¡±
¾î¶² ´ÜÀÏ Á¶Á÷ÀÌ ¿©·¯ ºÐ¾ß·Î ´Ù°¢ÈÇÏ°Ô µÇ¸é Á¶Á÷ ³»¿¡¼ ´Ù¸¥ ¸ñÇ¥¸¦ Ãß±¸ÇÏ´Â »ç¶÷µé °£ÀÇ ÀÌÁú°¨ÀÌ ¹ß»ýÇÏ°í ¶ÇÇÑ ÇÑ °¡Áö¿¡ ÁýÁßÇÏÁö ¸øÇϰí ÈûÀÌ Èð¾îÁö±â ¶§¹®¿¡ ´Ù°¢È´Â ½±»ç¸® ´Ù¾ÇÈ·Î º¯ÁúµÈ´Ù. ¼ÒÇÁÆ®¿þ¾î ¼¼°è¿¡¼µµ ÀÌ¿Í ºñ½ÁÇÏ°Ô ´Ù°¢È¸¦ °æ°èÇ϶ó´Â ¿ø¸®°¡ ÀÖ´Ù. ¹Ù·Î ÇϳªÀÇ Å¬·¡½º´Â ÇϳªÀÇ Ã¥ÀÓ¸¸À» °¡Á®¾ß ÇÑ´Ù´Â ¡®´ÜÀÏ Ã¥ÀÓ ¿øÄ¢(ÀÌÇÏ SRP)¡¯ÀÌ´Ù.
À̹ø ±Û¿¡¼´Â ÇÁ·Î±×·¥¿¡¼ °´Ã¼°¡ °¡Áö´Â Ã¥ÀÓÀ̶õ °ÍÀÌ ¹«¾ùÀÎÁö, ±×¸®°í ¿Ö °´Ã¼°¡ ´ÜÀÏ Ã¥ÀÓ¸¸ °¡Áö´Â °ÍÀÌ ÁÁÀºÁö¸¦ »ìÆìº¼ °ÍÀÌ´Ù. ¶ÇÇÑ ÇöÀç °´Ã¼°¡ ÀÌ¹Ì ¿©·¯ Ã¥ÀÓÀ» Áö´Ï°í ÀÖ´Â ¿©¿ì °´Ã¼ÀÎ °æ¿ì ³ªÅ¸³¯ ¼ö ÀÖ´Â ¹®Á¦Á¡(¾ÇÃë)°ú À̸¦ °í½¿µµÄ¡ °´Ã¼·Î ¹Ù²Ù´Â ¹æ¹ý¿¡ ´ëÇØ¼µµ ³íÀÇÇØ º»´Ù.
´ÜÀÏ Ã¥ÀÓ ¿øÄ¢ÀÇ °³¿ä
´ÙÀ½Àº ±¹Á¦ °Å·¡ ÀºÇà¿¡¼ »ç¿ëÇÏ´Â ¡®ÀÜ°í¡¯¶ó´Â Ŭ·¡½ºÀÌ´Ù. Àܰí Ŭ·¡½º´Â ´ÙÀ½°ú °°Àº ÀÎÅÍÆäÀ̽º¸¦ °®´Â´Ù. ÀÌ Å¬·¡½ºÀÇ ÀÎÅÍÆäÀ̽º´Â Á÷°üÀûÀ¸·Î ´Ü¼øÇÏ°í ±â´ÉÀûÀ¸·Î ¿Ï°áµÈ Ŭ·¡½ºÀÏ ¼ö ÀÖ´Ù. ÇÏÁö¸¸ ¸¸¾à µÎ °³ÀÇ ¼·Î ´Ù¸¥ ¾ÖÇø®ÄÉÀ̼ÇÀÌ Àܰí Ŭ·¡½º¸¦ »ç¿ëÇÑ´Ù°í ÇßÀ» ¶§ ÀÌ µÎ »ç¿ëÀÚ Å¬·¡½º´Â ¼·Î ´Ù¸¥ ¸Þ½îµå¸¦ ÀÌ¿ëÇÏ°Ô µÈ´Ù. ȯÀ² Á¶Á¤ ¾ÖÇø®ÄÉÀ̼ÇÀº ¡®È¯À² °è»ê¡¯ ¸Þ½îµå¸¦ ÀÌ¿ëÇÒ °ÍÀ̰í ÀÌÀ² °ü¸® ¾ÖÇø®ÄÉÀ̼ÇÀº ±Ý¾×¿¡ °üÇÑ ÀÎÅÍÆäÀ̽º¸¦ ÀÌ¿ëÇÒ °ÍÀÌ´Ù.
ÇÏÁö¸¸ ÀÌ °¢ ¾ÖÇø®ÄÉÀ̼ÇÀÌ °¢°¢ ¹èÆ÷µÆÀ» ¶§ Àܰí Ŭ·¡½º´Â Á¤Ã¼¼ºÀÇ È¥¶õÀÌ »ý±ä´Ù. ¿Ö³ÄÇϸé ÀÌÀ²°ü¸® ¾ÖÇø®ÄÉÀ̼ǿ¡ ¹èÆ÷µÉ ¶§´Â ¡®È¯À² °è»ê¡¯ ¸Þ½îµå°¡ ¹«¿ëÇÏ°Ô µÇ°í ȯÀ² Á¶Á¤ ¾ÖÇø®ÄÉÀ̼ǰú ¹èÆ÷µÉ ¶§´Â ±Ý¾×¿¡ °üÇÑ ÀÎÅÍÆäÀ̽º°¡ ¼Ò¿ÜµÇ±â ¶§¹®ÀÌ´Ù. ¹®Á¦´Â ¿©±â¼ ±×Ä¡Áö ¾Ê´Â´Ù. ¸¸¾à ȯÀ² °è»ê ¸Þ½îµåÀÇ ½Ã±×´Ïó°¡ º¯°æµÉ °æ¿ì ȯÀ² °è»êÀ» ¿äûÇÏ´Â Àܰí Ŭ·¡½ºÀÇ ´Ù¸¥ ¸Þ½îµåµéÀÌ °°ÀÌ º¯°æµÇ¾î¾ß ÇÑ´Ù. °£°áÇÏ°Ô ¼³°èÇÑ Àܰí Ŭ·¡½º´Â È®½ÇÈ÷ ¹®Á¦¸¦ ³»ÀåÇϰí ÀÖ¾ú´Ù.
 |
| <±×¸² 1> Àܰí Ŭ·¡½º |
¹®Á¦ÀÇ ¿øÈäÀº ¹«¾ùÀϱî? Àܰí Ŭ·¡½º´Â »ç½ÇÀº µÎ °¡Áö Ã¥ÀÓÀ» °¡Áö°í ÀÖ´Ù. ¼ö¸®Àû ÀÌÀ² ¿¬»êÀ» ´ã´çÇÏ´Â ¡®È¯À² °è»ê¡¯ÀÇ Ã¥ÀÓ°ú ±Ý¾×¿¡ °ü·ÃÇÑ Ã³¸®¸¦ ´ã´çÇÏ´Â ¸Þ½îµåµéÀÌ ¶Ç ´Ù¸¥ Ã¥ÀÓÀÌ´Ù. ¶ÇÇÑ ÇϳªÀÇ Å¬·¡½º ¾È¿¡ Çʿ信 ÀÇÇØ µÎ °¡Áö Ã¥ÀÓÀÌ °øÁ¸ÇÒ ¶§ ¼·ÎÀÇ ÀÇÁ¸°ü°è´Â ½É°¢ÇÏ°Ô °°áÇյDZ⠶§¹®¿¡ º¯°æ¿¡ ´ëÇÑ Ãæ°ÝÀÌ Àü´ÞµÉ ¼ö¹Û¿¡ ¾ø´Ù.
È®½ÇÈ÷ µÎ °¡Áö Ã¥ÀÓÀ» ´ã´çÇØ¾ß ÇÏ´Â ÇÑ Å¬·¡½º´Â ºÒÆíÇÑ Á¡ÀÌ ¸¹´Ù. Áö³ ±Û¿¡ ¼Ò°³ÇÑ OCP´Â ¡®È®À塯ÀÌ ¼³°èÀû °üÀü Æ÷ÀÎÆ®¶ó¸é ´ÜÀÏ Ã¥ÀÓ ¿øÄ¢(Single Responsibility Principle : SRP)Àº ¡®º¯°æ¡¯ÀÌ °üÀü Æ÷ÀÎÆ®°¡ µÉ °ÍÀÌ´Ù. ÀÌ ¡®º¯°æ¡¯ÀÇ °ÅºÏÇÔÀ» Á¶ÀåÇÏ´Â ¿ä¼Ò´Â ¼·Î ´Ù¸¥ ¡®Ã¥ÀÓ¡¯ÀÌ È¥ÀçÇØ Àִٴµ¥ ÀÖ´Ù.
SRPÀÇ Å°¿öµå´Â Ã¥ÀÓÀ¸·Î ¿ä¾àµÇ´Âµ¥, ±×·¸´Ù¸é Ã¥ÀÓÀ̶õ ¹«¾ùÀϱî? Ã¥ÀÓÀ̶õ ¡®º¯°æÀ» À§ÇÑ ÀÌÀ¯¡¯ÀÌ´Ù. ¸¸¾à ÇϳªÀÇ Å¬·¡½º¿¡ º¯°æÀ» À§ÇÑ µÎ °¡Áö ÀÌ»óÀÇ ÀÌÀ¯°¡ ÀÖ´Ù¸é ±× Å¬·¡½º´Â ÇÑ °¡Áö ÀÌ»óÀÇ Ã¥ÀÓÀ» °®°í ÀÖ´Â °ÍÀÌ´Ù. <±×¸² 1>ÀÇ Àܰí Ŭ·¡½º´Â º¯°æÀÇ ³»¿ëÀÌ µÎ °¡Áö·Î ¿ä¾àµÈ´Ù. ±Ý¾×°ú ȯÀ²ÀÌ´Ù. Áï, Àܰí Ŭ·¡½º´Â ±Ý¾×°ú ȯÀ²ÀÇ Ã¥ÀÓÀ» °®°í ÀÖ´Ù.
SRP´Â ÇϳªÀÇ Å¬·¡½º¿¡ ÇÑ °¡Áö Ã¥ÀÓÀ» °¡¸£Ä¡´Â ¿øÄ¢ÀÌ´Ù. ¿ì¸®´Â ¼³°è °üÁ¡¿¡¼ ¿ì¸®°¡ ÀνÄÇÏÁö ¸øÇÏ´Â SRP À§¹ÝÀ» ÀÚÁÖ ÇÏ°Ô µÈ´Ù. ÀÌ À§¹ÝÀ» °æ°èÇϱâ À§ÇØ ±íÀº ÅëÂû·ÂÀÌ ÇÊ¿äÇÏÁöµµ ¾Ê´Ù. ´ÜÁö ¸Ó¸®¿¡ ¡®Ã¥ÀÓ¡¯À̶õ ´Ü¾î¸¦ »ó±âÇÏ´Â ½À°üÀÌ¸é µÈ´Ù.
À§¹Ý »çÇ׿¡´Â ´ë°¡°¡ µû¸¥´Ù. SRP¸¦ À§¹ÝÇÒ °æ¿ì µû¸£´Â Àç¾ÓÀº ù ¹øÂ°·Î ¡®¿Õµû¡¯°¡ ¹ß»ýÇÑ´Ù´Â °ÍÀÌ´Ù. Àܰí Ŭ·¡½º°¡ ÀÌÀ² °ü¸® ¾ÖÇø®ÄÉÀ̼ǰú ¹èÆ÷µÆÀ» ¶§ È®½ÇÈ÷ ¡®È¯À² °è»ê¡¯ ¸Þ½îµå´Â ¼Ò¿ÜµÈ´Ù. Áï ¸¸¾à A¶ó´Â Ã¥ÀÓ°ú B¶ó´Â Ã¥ÀÓÀ» °®°í Àִ Ŭ·¡½º°¡ ÀÖÀ» °æ¿ì A¸¸ ÇÊ¿ä·Î ÇÏ´Â ¾ÖÇø®ÄÉÀ̼ÇÀº Ç×»ó B¸¦ µé°í ´Ù³à¾ß ÇÑ´Ù.
¹®Á¦´Â ¿©±â¼ ±×Ä¡Áö ¾Ê´Â´Ù. µÎ ¹øÂ° Àç¾ÓÀº ¹«°üÇÑ ¸Þ½îµå¿¡ º¯°æÀÌ ¹ß»ýÇÒ °æ¿ì ºÒÇÊ¿äÇÑ º¯°æ ÀÓÆÑÆ®°¡ Àü´ÞµÈ´Ù. ¸¸¾à ¡®È¯À² °è»ê¡¯ ¸Þ½îµå°¡ º¯°æµÆÀ» °æ¿ì ÀÌÀ² °ü¸® ¾ÖÇø®ÄÉÀ̼ÇÀº »ç¿ëÇÏÁöµµ ¾Ê´Â ¡®È¯À² °è»ê¡¯ ¸Þ½îµå ¶§¹®¿¡ ´Ù½Ã ÄÄÆÄÀÏÇØ¾ß ÇÏ°í ¸®Å×½ºÆ®ÇØ¾ß Çϸç Àç¹èÆ÷ÇØ¾ß ÇÑ´Ù. ÀÌÀ² °ü¸®¿Í ÀüÇô ¹«°üÇѵ¥µµ ºÒ±¸Çϰí... »ç½ÇÀº ÀÌ ÀÓÆÑÆ®ÀÇ ¿µÇâÀº ´õ ½É°¢Çѵ¥ ´ÙÀ½ÀÇ ÄÉÀ̽º ½ºÅ͵𿡼 »ìÆìº¸°Ú´Ù.
ÀÌ¹Ì ±¸ÇöµÈ ¼ÒÇÁÆ®¿þ¾î¿¡¼ ÀÌ Àç¾ÓµéÀº ´Ù½Ã (¡º¸®ÆÑÅ丵¡»¿¡¼ ¼Ò°³ÇÏ´Â) ¾ÇÃë(bad smell)·Î ºÐ·ùµÉ ¼ö ÀÖ´Ù. Áï, ¹«°üÇÑ º¯°æ¿¡ ÇÇÇØ¸¦ ´çÇѴٵ簡 ºÒÇÊ¿äÇÑ ¿ä¼Ò°¡ µû¶ó´Ù´Ò °æ¿ì SRP¸¦ Àû¿ëÇØ¾ß ÇÏ´Â »¡°£ºÒ(bad smell)·Î »ý°¢Çصµ ¹«¹æÇÏ´Ù. ±×·¸´Ù¸é SRP´Â ¾î¶² ±¸Á¶¸¦ Á¦¾ÈÇϰí ÀÖÀ»±î?
¸¶Æ¾ ÆÄ¿ï·¯ÀÇ ¿£ÅÍÇÁ¶óÀÌÁî ÆÐÅÏÀ» ÀÌ¿ëÇÑ ÄÉÀ̽º ½ºÅ͵ð
Áö±ÝÀº DB¿¡ °üÇÑ ¿©·¯ ¿ì¼öÇÑ ÅøµéÀÌ Á¦°øµÇ°í DB¿Í °ü·ÃÇÑ ÁÁÀº ¼³°è¹æ½ÄÀÌ ¸¹ÀÌ Á¦¾ÈµÇ°í ÀÖ´Ù. ±×·¡¼ °ú°Å¿¡ º¹ÀâÇϰí ÀåȲÇß´ø DB °ü·Ã ÄÚµåµéÀÌ ÇöÀç´Â ÀÌ·± Åø°ú ±â¹ýÀ» ÅëÇØ ¸¹ÀÌ ´Ü¼øÈ, Àº´ÐµÇ°í ÀÖÁö¸¸ ÀϹÝÀûÀ¸·Î °³¹ßÀÚ°¡ °£´ÜÇÏ°Ô DB °ü·Ã Ŭ·¡½º¸¦ ¼³°èÇÒ ¶§´Â <±×¸² 2>°ú °°Àº ¹æ½ÄÀ» »ç¿ëÇÑ´Ù.
 |
| <±×¸² 2> ¾×Ƽºê ¿ÀºêÁ§Æ® ÆÐÅÏ |
ÀÌ PersonÀ̶õ Ŭ·¡½º´Â ¼¼ °¡Áö Çʵ带 °¡Áö°í ÀÖ°í ÀÌ Å¬·¡½ºÀÇ ÇàÀ§¸¦ ó¸®ÇÏ´Â ¸Þ½îµå(ºñÁî´Ï½º ·ÎÁ÷ ¸Þ½îµå)¿Í DB¸¦ Á¢±ÙÇϱâ À§ÇÑ CRUD(Create, Read, Update, Delete) ¸Þ½îµå¸¦ °¡Áö°í ÀÖ´Ù. PersonÀ̶õ °´Ã¼°¡ ºñÁî´Ï½º ·ÎÁ÷ ¸Þ½îµå¿¡ ÀÇÇØ »óź¯È°¡ ÀϾÀ» °æ¿ì (Çʵ尡 CRUD µÆÀ» °æ¿ì) ÀûÀýÇÑ ½ÃÁ¡¿¡¼ DB¿¡ ±× º¯ÈµÈ °ªÀ» ¹Ý¿µÇØ¾ß Çϸç À̶§ DB Á¢±Ù ¸Þ½îµå¸¦ »ç¿ëÇÏ°Ô µÈ´Ù.
ÀÌ·¸°Ô ºñÁî´Ï½º ·ÎÁ÷ ¸Þ½îµå¿Í DB ó¸® ¸Þ½îµå¸¦ ºÐ¸®ÇÏ´Â ÀÌÀ¯´Â ÇϳªÀÇ ¸Þ½îµå¿¡ ºñÁî´Ï½º ·ÎÁ÷ ·çƾ°ú DB ó¸® ·çƾÀÌ È¥ÀçÇÏ°Ô µÆÀ» ¶§ ¸Þ½îµåÀÇ Ã³¸® ·çƾÀÇ º¹Àâµµ°¡ 2¹è ÀÌ»ó ÁõÆøµÇ±â ¶§¹®ÀÌ´Ù. ¸¸¾à ºÐ¸®½ÃŰÁö ¾Ê¾Ò´Ù¸é ÀÚ¹ÙÀÇ °æ¿ì Connection, PreparedStatement, ResultSet °°Àº JDBC Ŭ·¡½ºµéÀÌ ºñÁî´Ï½º ·ÎÁ÷°ú ¹«°üÇÏ°Ô Àüü ·çƾ »çÀÌ¿¡ µîÀåÇÏ°Ô µÈ´Ù. ¶ÇÇÑ ÀÌ·± ·çƾÀº ÇÊ¿¬ÀûÀ̰Եµ ·çÇÎÀ» Çϸç ResultSet¿¡¼ ·¹Äڵ带 ÀÐ¾î ¿Í¼ ¾î¶² 󸮸¦ ÇѴٵ簡 º¯¼ö¿¡ ´ëÀÔÇÏ´Â ·çƾÀÌ ÀÛ¼ºµÇ°Ô µÈ´Ù.
ÇÏÁö¸¸ ÀÌ·± ¸Þ½îµå´Â DB ó¸® ·çƾÀÌ º¯ÇÒ ¶§ ºñÁî´Ï½º Äڵ带 º¯°æÇØ¾ß ÇÏ¸ç ±× ¿ªÀÇ °æ¿ìµµ ¹ß»ýÇÏ°Ô µÈ´Ù. Áï ÇϳªÀÇ Ã¥ÀÓÀÌ º¯ÇÒ ¶§ ¿ª½Ã ÇÊ¿¬ÀûÀ̰Եµ ´Ù¸¥ Ã¥ÀÓµµ °°ÀÌ º¯ÇÏ°Ô µÈ´Ù. SRP À§¹ÝÀÇ µÎ ¹øÂ° Àç¾ÓÀÇ ´ëÇ¥ÀûÀÎ »ç·Ê°¡ ÀÌ·± °æ¿ìÀÌ´Ù.
ÀÌ·± °æ¿ì¸¦ À̹ø È£ÀÇ ¾ð¾î·Î Ç®ÀÌÇÏÀÚ¸é ÇϳªÀÇ ¸Þ½îµå¿¡ µÎ °¡ÁöÀÇ Ã¥ÀÓ(¡®ºñÁî´Ï½º ·ÎÁ÷¡¯°ú ¡®DB ·ÎÁ÷¡¯)ÀÌ °°ÀÌ ÀÖ¾ú±â ¶§¹®À̸ç À̸¦ ºÐ¸®ÇÏ¿© °ü¸®ÇÏ´Â ¼³°è°¡ <±×¸² 2>ÀÇ ¾×Ƽºê ¿ÀºêÁ§Æ® ÆÐÅÏÀÌ´Ù. ¾×Ƽºê ¿ÀºêÁ§Æ® ÆÐÅÏÀº ÀÌ·¸°Ô DB°ü·Ã 󸮸¦ µû·Î ¸Þ½îµå·Î ĸ½¶ÈÇÏ¸ç ºñÁî´Ï½º ·ÎÁ÷°ú DB ¸Þ½îµå¸¦ ºÐ¸®½ÃÅ´À¸·Î½á ±ò²ûÇÑ ¼³°è¿Í È¿°úÀûÀÎ °ü¸®¸¦ º¸ÀåÇÏ´Â ÀåÁ¡À» °®´Â´Ù.
¾×Ƽºê ¿ÀºêÁ§Æ® ÆÐÅÏÀº ÇϳªÀÇ ¸Þ½îµå¿¡¼ µÎ °¡Áö Ã¥ÀÓÀ» ºÐ¸®½ÃÄ×À» »ÓÀÌÁö ÇϳªÀÇ Å¬·¡½º¿¡¼ µÎ °¡Áö Ã¥ÀÓÀ» ºÐ¸®½ÃŰÁö ¸øÇß´Ù. Áï <±×¸² 2>ÀÇ Person Ŭ·¡½º¿¡´Â ¿©ÀüÈ÷ Person °´Ã¼¿¡ ´ëÇÑ DB¿¡ Á¢±Ù Ã¥ÀÓ°ú PersonÀÇ ºñÁî´Ï½º ·ÎÁ÷ Ã¥ÀÓÀÌ È¥ÀçµÇ¾î ÀÖ´Ù. µ¥ÀÌÅÍ ¸ÊÆÛ ÆÐÅÏÀº ÀÌ µÎ Ã¥ÀÓÀ» ºÐ¸®½ÃŰ´Â ±¸Á¶¸¦ Á¦¾ÈÇϰí ÀÖ´Ù(<±×¸² 3> ÂüÁ¶).
 |
| <±×¸² 3> µ¥ÀÌÅÍ ¸ãÆÛ ÆÐÅÏ |
»ç½Ç µ¥ÀÌÅÍ ¸ÊÆÛ ÆÐÅÏÀº ¿ì¸®°¡ ÈçÈ÷ DAO(Data Access Object)·Î ¾Ë°í ÀÖ´Â ÀÎÅÍÆäÀ̽º·Î ½ÇÇöȵǾî ÀÍÈ÷ »ç¿ëÇϰí ÀÖ´Â ÆÐÅÏÀÌ´Ù. ÈçÈ÷ ¡ºCore J2EE Patters¡»¿¡¼ ¼Ò°³µÈ ¡®DAO ÆÐÅÏ¡¯À¸·Î DAO¸¦ ¾Ë°Ô µÈ ÀÚ¹Ù °³¹ßÀÚ´Â DAO °³³äÀÌ J2EE¿¡¼ Á¦¾ÈµÈ °ÍÀ¸·Î ¾Ë°í ÀÖ´Ù. ÇÏÁö¸¸ DAO´Â ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®¿¡¼ 4GL ¾ð¾î ¾ÆÅ°ÅØÃ³ ÀÛ¾÷ ´ç½Ã °´Ã¼´ÜÀ§ DB Á¢±Ù ÀÎÅÍÆäÀ̽º·Î Á¦¾ÈÇÑ DB Á¢±Ù °´Ã¼ ÀÎÅÍÆäÀ̽º´Ù.
µ¥ÀÌÅÍ ¸ÊÆÛ´Â Ŭ·¡½º°¡ ºñÁî´Ï½º ·ÎÁ÷¿¡ ÁýÁßÇÒ ¼ö ÀÖµµ·Ï DB Á¢±Ù ·çƾÀ» µ¥ÀÌÅÍ ¸ÊÆÛ Ŭ·¡½º·Î ºÐ¸®½ÃÅ´À¸·Î½á ¾×Ƽºê ¿ÀºêÁ§Æ® ÆÐÅÏ¿¡¼ ÇÊÀÚ°¡ Á¦±âÇß´ø ¡®ÇÑ ÁöºØ µÎ Ã¥ÀÓ¡¯ÀÇ ¹®Á¦¸¦ ÇØ°áÇÑ´Ù. µ¥ÀÌÅÍ ¸ÊÆÛ ÆÐÅÏÀ» µû¸£¸é °´Ã¼¿Í µ¥ÀÌÅͺ£À̽º, ¸ÊÆÛ °£ÀÇ µ¶¸³¼ºÀÌ À¯ÁöµÇ¸ç, °´Ã¼¿Í DB °£¿¡ µ¥ÀÌÅ͸¦ À̵¿½ÃŰ´Â ¸ÊÆÛ ·¹À̾ Á¦°ø¹Þ°Ô µÈ´Ù. µû¶ó¼ DB Å×À̺íÀÌ º¯Çϰųª DB Á¢±Ù ·çƾÀÌ º¯ÇÑ´Ù ÇØµµ Person Ŭ·¡½º´Â º¯°æÀÇ Ãæ°Ý¿¡¼ ¾ÈÀüÇÏ´Ù.
¶ÇÇÑ µ¥ÀÌÅÍ ¸ÊÆÛ¸¦ »ç¿ëÇϸé Person °´Ã¼ÀÇ ÀÌ¿ë¹æ½Äµµ ÀÚ¿¬½º·´°Ô DB °ü·Ã ºÎºÐ°ú Person »ç¿ëÀ¸·Î ºÐ¸®µÈ´Ù. Áï ÃÖÃÊ DB¿¡ ÀúÀåµÈ Person °´Ã¼¸¦ »ý¼ºÇÒ °æ¿ì PersonDAO¿¡°Ô load¸¦ ¿äÃ»ÇØ DB¿¡¼ PersonÀ» ¾ò¾î¿À°í, »ç¿ëÀÚ´Â ÀÚ¿¬½º·´°Ô Person °´Ã¼ÀÇ ºñÁî´Ï½º ·ÎÁ÷ ºÎºÐ¸¸ ÁýÁßÇÏ°Ô µÈ´Ù. ÀÌ Person °´Ã¼¸¦ º¯°æÇϰųª »èÁ¦¸¦ ¿øÇÒ °æ¿ì °¢°¢ PersonMapper¸¦ ÅëÇØ insert, update¸¦ ¿äûÇÏ¿© DB ÀÛ¾÷À» À§ÀÓÇÑ´Ù.
¾×Ƽºê ¿ÀºêÁ§Æ® ÆÐÅÏÀÇ °æ¿ì ÀÌ µÎ °¡Áö Ã¥ÀÓ¿¡ °üÇÑ »ç¿ëÀÚÀÇ ÀÛ¾÷ÀÌ ¸í¹éÈ÷ ºÐ¸®µÇÁö ¸øÇߴµ¥ µ¥ÀÌÅÍ ¸ÊÆÛ ÆÐÅÏÀ» »ç¿ëÇϹǷΠ»ç¿ëÀÚÀÇ Person °´Ã¼¿¡ °üÇÑ Ã¥ÀÓÀ» »ç¿ëÇÏ´Â ¸ñÀû°ú ¹æ¹ýÀÌ ¸íÈ®ÇØÁø´Ù(Person °´Ã¼ÀÇ ÀÎÅÍÆäÀ̽ºÀÎÁö, DB °ü·Ã ÀÛ¾÷ÀÎÁö).
ÀÌ·Î½á ¾×Æ¼ºê ¿ÀºêÁ§Æ®¿Í µ¥ÀÌÅÍ ¸ÊÆÛ ÆÐÅÏÀ¸·Î ÃÖÃÊÀÇ Person Ŭ·¡½ºÀÇ Ã¥ÀÓÀº ¸íÈ®ÇÏ°Ô ºÐ¸®µÉ ¼ö ÀÖ¾ú´Ù. ÇÏÁö¸¸ ¸¸¾à Person °´Ã¼ÀÇ »óź¯È°¡ ¾ÐµµÀûÀ¸·Î ¸¹¾Æ¼ DB Á¢±ÙÀÌ ºó¹øÇÏ°Ô ÀÌ·ïÁö°í ÀÌ ºó¹øÇÑ DB Á¢±Ù ºñ¿ëÀ¸·Î ÀÎÇØ ¼º´ÉÀå¾Ö°¡ ¿Ã °æ¿ì¸¦ »ó»óÇØ º¸ÀÚ. ¿ì¸®´Â ÀÌ¿Í °°Àº °æ¿ì DB Á¢±Ù ºñ¿ëÀ» °¨¼Ò½Ã۱â À§ÇØ ÀϹÝÀûÀ¸·Î ¸ÊÆÛ ·¹ÀÌ¾î µÚ¿¡ ij½Ì ·¹À̾ µÐ´Ù. Áï Person Ŭ·¡½º¿¡°Ô ¶Ç ÇϳªÀÇ ¡®Ä³½Ì¡¯À̶ó´Â Ã¥ÀÓÀÌ ´õÇØÁø´Ù.
°¡·É ¾Õ¼ Á¦±âÇÑ ¹®Á¦Ã³·³ ¡®boby¡¯¶ó´Â Person °´Ã¼¸¦ n¹ø loadÇÑ´Ù°í ÇßÀ» ¶§ ±âÁ¸ ¹æ½ÄÀ¸·Î´Â n¹ø DB¿¡ SELECTÇØ¾ß ÇÑ´Ù. ÇÏÁö¸¸ SELECT´Â Çѹø¸¸À¸·Îµµ Á·ÇÏ´Ù. Çѹø loadµÈ °´Ã¼¸¦ Àç»ç¿ëÇÑ´Ù¸é DB Á¢±ÙÀº n-1¹ø »ý·«ÇÒ ¼ö ÀÖ´Ù.
¹®Á¦´Â ÀÌ Ä³½Ã¶õ Ã¥ÀÓÀ» ¾îµð¿¡ µÎ´À³ÄÀÏ °ÍÀÌ´Ù. ¾×Ƽºê ¿ÀºêÁ§Æ®Ã³·³ (°°Àº Ŭ·¡½ºÀÇ) ¸Þ½îµå ´ÜÀ§·Î Ŭ·¡½º ³»¿¡ ºÐ¸®½Ãų °ÍÀΰ¡, µ¥ÀÌÅÍ ¸ÊÆÛó·³ Ŭ·¡½º ´ÜÀ§·Î ¼·Î ºÐ¸®½Ãų °ÍÀΰ¡, ¾Æ´Ï¸é ´õ Å« ÄÄÆ÷³ÍÆ®³ª ÆÐŰÁö·Î ºÐ¸®ÇÒ °ÍÀΰ¡ÀÇ ºÐ¸® ´ÜÀ§ °áÁ¤ÀÌ °¥µî¿ä¼Ò°¡ µÈ´Ù.
¿©±â¼ ¼³°èÀÚ´Â ºÐ¸®ÀÇ ¡®Å©±â(granularity)¡¯¸¦ °í¹ÎÇÑ´Ù. ÀÛÀº ´ÜÀ§·Î ¼¶¼¼ÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖ´Â ¹Ì¼¼´ÜÀ§(fine-grained)·Î ±¸ºÐÇÒ °ÍÀΰ¡, ¾Æ´Ï¸é ´Ü¼øÇÏÁö¸¸ ÀÔµµ°¡ Å«(COARSE-GRAINED) ´ÜÀ§·Î ±¸ºÐÇÒ °ÍÀΰ¡¿¡ ´ëÇØ¼ ¸»ÀÌ´Ù. ÀÌ ¹®Á¦ÀÇ °æ¿ì ¾ÖÇø®ÄÉÀ̼ǿ¡¼ ¹®Á¦ ¿µ¿ªÀÌ °¢°¢ ¼·Î ´Ù¸¥ ÄÉÀ̽º ¹ÙÀÌ ÄÉÀ̽º·Î ÀÌ·ç¾îÁö±â ¶§¹®¿¡ ¸í¹éÈ÷ ÀϰüÀûÀ¸·Î Àû¿ëÇÒ °¡À̵å¶óÀÎÀ» Á¦°øÇϱâ Èûµé´Ù.
ÇÏÁö¸¸ ±× ±âÁØÀº ´ë»ó¿¡ ´ëÇÑ º¹Àâµµ, Å©±â, ¿ëµµ°¡ µÈ´Ù. º¹Àâµµ°¡ ³ô°í ºÎÇǰ¡ Å«µ¥ ¹ÝÇØ ±× ¿ë¹ýÀÌ ´Ü¼øÇÏ´Ù¸é COARSE-GRAINED°¡ ÀûÇÕÇÏ´Ù. ¿ªÀ¸·Î º¹Àâµµ°¡ ³·°í ºÎÇǰ¡ ÀÛÀ¸¸ç ¿ë¹ýÀÌ ´Ù¾çÇÏ´Ù¸é fine-grained°¡ ÀûÇÕÇÏ´Ù.
 |
| <±×¸² 4> ½Äº°ÀÚ ¸Ê ÆÐÅÏ |
¿©ÇÏÆ° ÀÌ °æ¿ì º¸Åë ½Äº°ÀÚ ¸Ê ÆÐÅÏÀÌ »ç¿ëµÇ´Âµ¥ ½Äº°ÀÚ ¸ÊÀº DB¸¦ ÅëÇØ ¾ò¾î¿Â °´Ã¼¸¦ ij½ÃÇÏ´Â ¸ÊÀÌ´Ù(<±×¸² 4>¿¡¼ ½Äº°ÀÚ ¸ÊÀº Ŭ·¡½º Å©±â·Î ºÐ¸®Çϰí ÀÖ´Ù). Çѹø loadµÈ °´Ã¼´Â ½Äº°ÀÚ ¸Ê¿¡ µî·ÏµÇ°í µÎ ¹øÂ° load ¿äûºÎÅÍ DB¿¡ SELECTÇÒ ÇÊ¿ä ¾øÀÌ ½Äº°ÀÚ ¸Ê¿¡¼ °¡Á®¿À¸é µÈ´Ù.
| |
| ¡®³ôÀº ÀÀÁýµµ, ³·Àº °áÇÕµµ(High Cohesion, Loose Coupling)¡¯ÀÇ ¿ø¸®´Â 1970³â´ë Larry Constantine°ú Edward YourdonÀÌ Á¤ÀÇÇß´ø ¾ÆÁÖ °íÀüÀûÀÎ ¿ø¸®ÀÌ´Ù. À̰ÍÀº ÇöÀç ¸ðµç ¼ÒÇÁÆ®¿þ¾î ½Ã½ºÅÛ °íÀ¯ÀÇ À¯Áöº¸¼ö¼º°ú ÀûÀÀ¼ºÀ» ÃøÁ¤ÇÏ´Â °¡Àå ÁÁÀº ¹æ¹ýÀ¸·Î »ç¿ëµÇ°í ÀÖ´Ù. ¼ÒÇÁÆ®¿þ¾î µðÀÚÀλӸ¸ ¾Æ´Ï¶ó ¾ÆÅ°ÅØÃ³ Æò°¡¿¡µµ ÀÌ ¿ø¸®°¡ ±âÁØÀÌ µÇ´Âµ¥, ±× ÀÌÀ¯´Â ÀÌ ¿ø¸®ÀÇ Àû¿ë È¿°ú°¡ ¾ÆÁÖ ¸í¹éÇϱ⠶§¹®ÀÌ´Ù.
ÀÌ ¿ø¸®ÀÇ ¿¹¿Ü´Â °ÅÀÇ Ã£¾Æº¸±â Èûµé¸¸Å º¸Æí¼ºÀ» °¡Áö°í ÀÖ¾î¼ ¸¶Ä¡ ¹°¸®ÇÐÀÇ ¿£Æ®·ÎÇÇ ¹ýĢó·³ Àý´ëÀûÀÎ ±â¹Ý¿ø¸®¸¦ Á¦½ÃÇÑ´Ù. ³·Àº ÀÀÁýµµ¸¦ °®´Â ±¸Á¶´Â º¯°æÀ̳ª, È®Àå ´Ü°è¿¡¼ ¸¹Àº ºñ¿ëÀ» ÁöºÒÇØ¾ß ÇÏ¸ç ³ôÀº °áÇÕµµÀÇ °æ¿ìµµ ¸¶Âù°¡ÁöÀÌ´Ù.
ÀÀÁýµµ´Â ¡®ÇϳªÀÇ Å¬·¡½º°¡ ÇϳªÀÇ ±â´É(Ã¥ÀÓ)À» ¿ÂÀüÈ÷ ¼øµµ ³ô°Ô ´ã´çÇϰí ÀÖ´Â Á¤µµ¡¯¸¦ ÀǹÌÇϸç À̵éÀº ¼·Î Á¶ÈµÉ¼ö·Ï ±× ±¸Á¶´Â ´Ü¼øÇØÁø´Ù. ÀÀÁýµµ°¡ ³ôÀº µ¿³×¿¡¼ ³»ºÎ °³Ã¼°¡ º¯ÇßÀ» ¶§ ´Ù¸¥ °³Ã¼¿¡ Ãæ°ÝÀ» ÁÖ´Â °ÍÀº ¿ÀÈ÷·Á ´ç¿¬ÇÑ Â¡ÈÄÀÌ´Ù. À̵éÀº ÇϳªÀÇ Ã¥ÀӾƷ¡ ¼·Î À¯±âÀûÀÎ °ü°è¸¦ °®°í Àֱ⠶§¹®¿¡ ³»ºÎ °³Ã¼°¡ º¯ÇßÀ» ¶§ ´Ù¸¥ °³Ã¼ÀÇ º¯°æ È®·üÀÌ ³ô¾ÆÁø´Ù. ¸¶Ä¡ ¿¹»Û ºÎÃ÷¸¦ »ç¸é ºÎÃ÷¿¡ ¾î¿ï¸®´Â Ä¡¸¶¸¦ ÀÔ¾î¾ß ÇϵíÀÌ¡¦ ÀÀÁýµµÀÇ Á¾·ù´Â ´Ù¾çÇѵ¥ ´ÙÀ½Àº ±ÇÀåÇÒ ¸¸ÇÑ ¼ø±â´ÉÀû ÀÀÁý °ü°èµéÀÌ´Ù.
* ±â´ÉÀû ÀÀÁý(Functional Cohesion)
ÀϰüµÈ ±â´ÉµéÀÌ ÁýÇÕµÈ °æ¿ì¸¦ ¸»Çϸç <±×¸² 3>ÀÇ µ¥ÀÌÅÍ ¸ÊÆÛ´Â DB 󸮶ó´Â ±â´É Ç׸ñÀÇ ³ôÀº ÀÀÁý¼ºÀ» °®´Â´Ù.
* ¼øÂ÷Àû ÀÀÁý(Sequential Cohesion)
ÇÑ Å¬·¡½º ³»¿¡ µîÀåÇÏ´Â ÇϳªÀÇ ¼ÒÀÛ¾÷(¸Þ½îµå)ÀÇ °á°ú°¡ ´ÙÀ½ ¼ÒÀÛ¾÷(¸Þ½îµå)ÀÇ ÀÔ·ÂÀ¸·Î »ç¿ëµÇ´Â °ü°è(ÆÄÀÌÇÁ¶óÀÎ ¹æ½ÄÀÇ Ã³¸® üÀÎ °ü°è).
* ±³È¯Àû ÀÀÁý(Communicational Cohesion)
µ¿ÀÏÇÑ ÀԷ°ú Ãâ·Â ÀڷḦ Á¦°øÇÏ´Â ¸Þ½îµåµéÀÇ ÁýÇÕÀ» ¸»Çϸç, ÆÑÅ丮 Ŭ·¡½º´Â ÀüÇüÀûÀÎ ±³È¯Àû ÀÀÁýµµ°¡ ³ôÀº ÀÎÅÍÆäÀ̽º¸¦ °®´Â´Ù.
* ÀýÂ÷Àû ÀÀÁý(Procedural Cohesion)
¼ø¼ÀûÀ¸·Î 󸮵Ǿî¾ß ÇÏ´Â ¼ÒÀÛ¾÷(¸Þ½îµå)µéÀÌ ±× ¼ø¼¿¡ ÀÇÇØ Á¤·ÄµÇ´Â ÀÀÁý°ü°è
* ½Ã°£Àû ÀÀÁý(Temporal Cohesion)
½Ã°£ÀÇ È帧¿¡ µû¶ó ÀÛ¾÷ ¼ø¼°¡ Á¤·ÄµÇ´Â ÀÀÁý°ü°è
* ³í¸®Àû ÀÀÁý(Logical Cohesion)
À¯»çÇÑ ¼º°ÝÀÇ °³Ã¼µéÀÌ ¸ð¿© ÀÖÀ» °æ¿ì¸¦ ¸»Çϸç java.io Ŭ·¡½ºµéÀÇ °æ¿ì°¡ ´ëÇ¥ÀûÀÎ ¿¹ÀÌ´Ù.
ÀÌ¿Í ¹ÝÇØ °áÇÕµµ´Â ¡®Å¬·¡½º°£ÀÇ ¼·Î ´Ù¸¥ Ã¥ÀÓµéÀÌ ¾ôÇô ÀÖ¾î¼ »óÈ£ÀÇÁ¸µµ°¡ ³ôÀº Á¤µµ¡¯¸¦ ÀǹÌÇϸç À̵éÀÌ Á¶Çյɼö·Ï Äڵ带 º¸±â°¡ ±«·Î¿öÁø´Ù. ÀÌÀ¯´Â ¼·Î ´Ù¸¥ Ã¥ÀÓÀÌ »ê¸¸ÇÏ°í º¹ÀâÇÏ°Ô ¾ôÇôÀֱ⠶§¹®¿¡ °¡µ¶¼ºÀÌ ¶³¾îÁö°í À¯Áöº¸¼ö°¡ °ï¶õÇØÁö±â ¶§¹®ÀÌ´Ù. ÀÌÀ¯´Â ÇÊ¿ä ¾ø´Â ÀÇÁ¸¼º¿¡ ÀÖ´Ù. ¸¶Ä¡ Űº¸µåÀÇ ÀÚÆÇ Çϳª°¡ °íÀ峪µµ Űº¸µå Àüü¸¦ ¹Ù²ã¾ß ÇÏ´Â °Íó·³. ÇϳªÀÇ º¯°æÀÌ ¾öû³ ¹ÎÆó¸¦ ¾ß±âÇÏ´Â °ü°èÀÌ´Ù. ´ÙÀ½Àº ¼ö¿ëÇÒ ¼ö ÀÖ´Â ¼öÁØÀÇ °áÇÕ °ü°èµéÀÌ´Ù.
* ÀÚ·á °áÇÕ(Data Coupling)
µÎ °³ ÀÌ»óÀÇ Å¬·¡½º°¡ ¸Å°³º¯¼ö¿¡ ÀÇÇØ¼ °áÇÕ °ü°è¸¦ °¡Áö¹Ç·Î ³·Àº ¼öÁØÀÇ °áÇÕµµ·Î ¿¬°üµÇ´Â °æ¿ì
* ½ºÅÆÇÁ °áÇÕ(Stamp Coupling)
ÀÚ·á °áÇÕÀÇ °æ¿ì¿¡¼ ¸Å°³º¯¼ö ÀϺθ¸À» »ç¿ëÇÏ´Â °æ¿ì
* Á¦¾î °áÇÕ (Control Coupling)
µÎ Ŭ·¡½º°£ÀÇ Á¦¾î À̵¿ÀÌ ¸Å°³º¯¼ö¸¦ ÀÌ¿ëÇÏ¿© »ç¿ëµÇ´Â °æ¿ì·Î Ä¿¸Çµå ÆÐÅÏÀÌ ´ëÇ¥ÀûÀÎ »ç·ÊÀÌ´Ù(Áö³ ¿¬Àç ±â»ç OCP ÂüÁ¶).
| | | | | |
| |
Áï ¼ø¼´Â ¡®1. ¿ì¼± key¿¡ ÇØ´çÇÏ´Â °´Ã¼¸¦ ½Äº°ÀÚ ¸Ê¿¡¼ ã´Â´Ù( 1.1. ¾ø´Ù¸é DB¿¡¼ ¾ò¾î¿Â´Ù. 1.2. ½Äº°ÀÚ ¸Ê¿¡ µî·ÏÇÑ´Ù). 2. ¸®ÅÏÇÑ´Ù¡¯'ÀÇ ÀýÂ÷¸¦ ¹â´Â´Ù. ¸¶Ä¡ ½Ì±ÛÅæ ÆÐÅÏó·³ ÇÑ ¹øÀÇ Á¢±ÙÀ» º¸ÀåÇÔÀ¸·Î½á DB Á¢±Ù ºñ¿ëÀ» °¨¼Ò½ÃŲ´Ù.
ÀÌ¿Í ´õºÒ¾î ½ÇÁ¦ ¿£ÅÍÇÁ¶óÀÌÁî ¾ÖÇø®ÄÉÀÌ¼Ç ¼³°è ½Ã µ¥ÀÌÅÍ Á¢±ÙÀÇ µ¿±âÈ, µ¿½Ã¼º ó¸®, Ç®¸µ, O/R ¸ÊÇÎ µîÀÇ ¡®Ã¥ÀÓ¡¯µéÀÌ µîÀåÇÏ°Ô µÇ´Âµ¥ ÀÌ °¢ Ã¥ÀÓµéÀ» ´ã´çÇϴ Ŭ·¡½º¸¦ ºÐ¸®½Ã۰í ÀÌµé °£ÀÇ °ü°è¸¦ Àß Á¤ÀÇÇÒ¼ö·Ï º¹Àâµµ´Â °¨¼ÒÇÏ°í ¾ÆÅ°ÅØÃ³´Â ±ú²ýÇØÁø´Ù.
ÇöÀç Á¦°øµÇ°í ÀÖ´Â DB °ü·Ã ÇÁ·¹ÀÓ¿öÅ©´Â ÀÌ Ã¥ÀÓµéÀ» ¸Ã´Â ±â´ÉÀ» ±¸ÇöÇÑ ³à¼®µéÀÌ´Ù. SRPÀÇ È¿°ú°¡ ¹Ù·Î ¿©±â¿¡ ÀÖ´Ù. SRP¸¦ Àû¿ëÇÏ¸é ¹«¾ùº¸´Ùµµ Ã¥ÀÓ ¿µ¿ªÀÌ È®½ÇÇØÁö±â ¶§¹®¿¡ ÇÑ Ã¥ÀÓÀÇ º¯°æ¿¡¼ ´Ù¸¥ Ã¥ÀÓÀÇ º¯°æÀ¸·ÎÀÇ ¿¬¼âÀÛ¿ë¿¡¼ ÀÚÀ¯·Î¿ï ¼ö ÀÖ´Ù.
ÇÏÁö¸¸ ¹«Á¶°Ç Ã¥ÀÓÀ» ºÐ¸®ÇÑ´Ù°í SRP°¡ Àû¿ëµÇ´Â °Ç ¾Æ´Ï´Ù. °¡·É µ¥ÀÌÅÍ ¸ÊÆÛ Ŭ·¡½ºÀÇ ¸Þ½îµåµéÀÌ °¢°¢ÀÇ insert, delete, update, load Ŭ·¡½º·Î ºÐ¸®µÆÀ» °æ¿ì¸¦ »ý°¢ÇØ º¸ÀÚ. ¸¶Ä¡ ÀýÂ÷Àû ¾ð¾î¿¡¼¿Í °°Àº ÇÔ¼ö ´ÜÀ§ÀÇ Å¬·¡½º°¡ µÉ °ÍÀÌ´Ù. °¢ ¸Þ½îµå ¿ªÇÒ¿¡ µû¸¥ Ã¥ÀÓµéÀÌ ºÐ¸®µÇ¾úÁö¸¸ ¼³°è´Â ÀåÈ²ÇØÁö°í °ü°è´Â º¹ÀâÇØÁø´Ù. ÇÏÁö¸¸ ÀÌ ¹®ÀåÀº Ʋ¸° ¹®ÀåÀÌ´Ù. µ¿ÀÏÇÑ Ã¥ÀÓÀ» °®´Â ¿©·¯ ¸Þ½îµåµéÀÌ ºÐ¸®µÈ °ÍÀÌ´Ù. Áï ºÐ¸®ÀÇ ±âÁØÀº Ã¥ÀÓÀÌ¸ç ºÐ¸®ÀÇ ¸ñÀûÀº º¹Àâµµ °¨¼Ò¿¡ ÀÖ´Ù.
¹Ý¸é °¢°¢ ºÐ¸®µÈ insert, delete, update, load Ŭ·¡½ºµéÀÌ ÀÖ´Ù°í ÇßÀ» ¶§ À̵éÀº ÇÑ Ã¥ÀӾƷ¡ º´ÇյǾî¾ß ÇÒ °ÍÀÌ´Ù. ¿Ö³ÄÇϸé À̵éÀº º´Çյɼö·Ï °ü°è´Â ´Ü¼øÇØÁö°í ¼³°è°¡ Àϸñ¿ä¿¬ÇØÁö±â ¶§¹®ÀÌ´Ù. ±×·¸´Ù¸é ÀÌ ¼·Î »ó¹ÝµÈ °ü°è, Áï ¾î¶² °æ¿ì´Â ºÐ¸®¸¦ ÇÒ¼ö·Ï ¼³°è°¡ ±ú²ýÇØÁö°í, ¹Ý´ë·Î ¾î¶² °æ¿ì´Â º´ÇÕÀ» ÇÒ¼ö·Ï ¼³°è°¡ ±ú²ýÇØÁö´Âµ¥ ÀÌ Â÷ÀÌ´Â ¹«¾ùÀϱî?
°¢ °³Ã¼ °£ÀÇ ÀÀÁý·ÂÀÌ ÀÖ´Ù¸é º´ÇÕÀÌ ¼øÀÛ¿ëÀÇ ¼ö´ÜÀÌ µÇ°í °áÇÕ·ÂÀÌ ÀÖ´Ù¸é ºÐ¸®°¡ ¼øÀÛ¿ëÀÇ ¼ö´ÜÀÌ µÈ´Ù. ÀÀÁý·ÂÀÌ ÀÖ´Ù´Â °ÍÀº ¿©·¯ °³Ã¼°¡ °°Àº Ã¥ÀӾƷ¡ ÀÖ´Ù´Â °ÍÀ» ÀǹÌÇÏ¸ç °áÇÕ·ÂÀÌ ÀÖ´Ù´Â °ÍÀº ÇÑ °³Ã¼°¡ ¿©·¯ Ã¥ÀÓÀ» °®°í ÀÖ´Ù´Â Àǹ̰¡ µÈ´Ù. µû¶ó¼ ÀÀÁýµµ´Â ³ôÀ»¼ö·Ï, °áÇÕµµ´Â ³·À»¼ö·Ï ÁÁÀº ¼³°è ǰÁúÀ» º¸Àå¹Þ´Â´Ù.
SRP À§¹ÝÀÇ ¾ÇÃëµé
SRP´Â ÇϳªÀÇ °´Ã¼°¡ ÇϳªÀÇ Ã¥ÀÓ, Áï ÇϳªÀÇ ¡®º¯°æÀÇ ÀÌÀ¯¡¯¸¸ Áö´Ï°Ô ÇÔÀ¸·Î½á ¼³°è¸¦ ´Ü¼øÇÏ°Ô ÇÏ°í º¯È¿¡ ±â¹ÎÇÏ°Ô ¸¸µé¾î ÁØ´Ù. ÇÊÀÚ´Â ¼µÎ¿¡ SRP À§¹ÝÇßÀ» ¶§ Àç¾ÓÀ» ¾ÇÃë·Îµµ ¼Ò°³Çߴµ¥ À̹ø¿¡ ¼Ò°³ÇÒ ¾ÇÃëµéÀº ¡º¸®ÆÑÅ丵¡»¿¡¼ ±¸Ã¼ÈµÈ ¾ÇÃëµéÀÌ´Ù. SRP À§¹ÝÀÇ ¾ÇÃë´Â ¡®¿©·¯ ¿øÀο¡ ÀÇÇÑ º¯°æ(divergent change)¡¯¿Í ¡®»êźÃÑ ¼ö¼ú(shotgun surgery)¡¯À» µé ¼ö ÀÖ´Ù.
¿©·¯ ¿øÀο¡ ÀÇÇÑ º¯°æ
¿©·¯ ¿øÀο¡ ÀÇÇÑ º¯°æÀº ÇÑ Å¬·¡½º¸¦ ¿©·¯ °¡Áö ´Ù¸¥ ÀÌÀ¯·Î °íÄ¥ Çʿ䰡 ÀÖÀ» ¶§ ¹ß»ýÇÑ´Ù. Áï, ÇϳªÀÇ Å¬·¡½º¿¡ ¿©·¯ Ã¥ÀÓÀÌ È¥ÀçÇϰí ÀÖ¾î¼ ÇϳªÀÇ Ã¥ÀÓÀÇ º¯È°¡ ´Ù¸¥ Ã¥ÀÓ¿¡°Ô ¿µÇâÀ» ÁØ´Ù. ±×¸®°í ÀÌ Ã¥ÀÓÀÌ µÎ °³º¸´Ù ÈξÀ ¸¹Àº ¿©·¯ °³·Î È¥ÀçµÈ´Ù¸é ÀÌ Å¬·¡½º´Â ½É°¢ÇÑ °í¹®°üÀÌ µÈ´Ù. ´õ¿íÀÌ ÀÌ ±¸Á¶´Â ´õ ±«·Î¿î °æ¿ì·Î ½É鵃 ¼ö ÀÖ´Ù.
<±×¸² 1>ÀÇ ¡®Àܰí Ŭ·¡½º¡¯¿¡¼ ¡®È¯À² °è»ê¡¯À̶õ Ã¥ÀÓÀÇ º¯È·Î ´Ù¸¥ ±Ý¾× °ü·Ã Ã¥ÀÓµéÀÇ ÀÎÅÍÆäÀ̽º±îÁö Ä®À» ´ë¾ß ÇÒ »óȲ¿¡ À̸¥´Ù¸é ÀÛÀº ¡®È¯À² °è»ê¡¯ÀÇ º¯°æÀÌ ÀüÇô ¹«°üÇÑ ±Ý¾× °ü·Ã ÀÎÅÍÆäÀ̽º¸¦ ÀÌ¿ëÇÏ´Â ¸ðµç »ç¿ëÀÚ Å¬·¡½º±îÁö º¯°æÇØÁà¾ß ÇÏ´Â °ÍÀÌ´Ù. ÀÌ·± À§Çè »óȲÀ» ¼Ò°³ÇÑ °ÍÀÌ ¡®¿©·¯ ¿øÀο¡ ÀÇÇÑ º¯°æ¡¯À̶ó´Â ³ª»Û ³¿»õÀÌ´Ù.
¡®¿©·¯ ¿øÀο¡ ÀÇÇÑ º¯°æ¡¯À» ÇØ°áÇÏ´Â ¹æ¹ýÀº °æ¿ì¿¡ µû¶ó ´Ù¸£´Ù. ´ÙÀ½Àº ¿©·¯ ¿øÀο¡ ÀÇÇÑ º¯°æÀ» ÇØ°áÇÏ´Â ¸®ÆÑÅ丵 ±â¹ýÀÌ´Ù.
¡ß Extract Class´Â È¥ÀçµÈ °¢ Ã¥ÀÓÀ» °¢°¢ÀÇ °³º° Ŭ·¡½º·Î ºÐÇÒÇÏ¿© Ŭ·¡½º ´ç ÇϳªÀÇ Ã¥ÀÓ¸¸À» ¸Ãµµ·Ï ÇÏ´Â °ÍÀÌ´Ù. ¾×Ƽºê ¿ÀºêÁ§Æ® ÆÐÅÏ¿¡¼ µ¥ÀÌÅÍ ¸ÊÆÛ ÆÐÅÏÀ¸·ÎÀÇ ÁøÈ°¡ ´ëÇ¥ÀûÀÎ »ç·Ê°¡ µÈ´Ù. ¿©±â¼ °ü°ÇÀº Ã¥ÀÓ¸¸ ºÐ¸®ÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó ºÐ¸®µÈ µÎ Ŭ·¡½º°£ÀÇ °ü°èÀÇ º¹Àâµµ¸¦ ÁÙÀ̵µ·Ï ¼³°èÇÏ´Â °ÍÀÌ´Ù.
¡ß ¸¸¾à Extract ClassµÈ °¢°¢ÀÇ Å¬·¡½ºµéÀÌ À¯»çÇÏ°í ºñ½ÁÇÑ Ã¥ÀÓÀ» Áߺ¹Çؼ °®°í ÀÖ´Ù¸é Extract Superclass¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. Extract ClassµÈ °¢°¢ÀÇ Å¬·¡½ºµéÀÇ °øÀ¯µÇ´Â ¿ä¼Ò¸¦ ºÎ¸ð Ŭ·¡½º·Î Á¤ÀÇÇÏ¿© ºÎ¸ð Ŭ·¡½º¿¡ À§ÀÓÇÏ´Â ±â¹ýÀÌ´Ù. µû¶ó¼ °¢°¢ÀÇ Extract ClassµéÀÇ À¯»çÇÑ Ã¥ÀÓµéÀº ºÎ¸ð¿¡°Ô ¸í¹éÈ÷ À§ÀÓÇÏ°í ´Ù¸¥ Ã¥ÀÓµéÀº °¢ÀÚ¿¡°Ô Á¤ÀÇÇÒ ¼ö ÀÖ´Ù.
| |
| À±¼ºÁØ, Á¶Àç¹Ú ´ÔÀÌ ¹ø¿ªÇÏ°í ´ëû¹Ìµð¾î¿¡¼ Ãâ°£µÈ ¸¶Æ¾ ÆÄ¿ï·¯ÀÇ¡º¸®ÆÑÅ丵¡» Çѱ¹¾îÆÇÀ» º¸¸é ¿©·¯ ¿øÀο¡ ÀÇÇÑ º¯°æ(divergent change)ÀÌ ¡®È®»êÀû º¯°æ¡¯À̶ó µÇ¾î ÀÖ´Ù. ÇÏÁö¸¸ È®»êÀû º¯°æÀ̶ó ÇßÀ» ¶§´Â º¯°æÀÌ ´Ù¸¥ Ŭ·¡½º·Î È®»êµÈ´Ù´Â ´À³¦ÀÌ °Çϰí, Ŭ·¡½º°¡ ¿©·¯ º¯°æ ¿øÀο¡ ÀÇÇØ º¯°æµÈ´Ù´Â ´À³¦ÀÌ ¾ð¶æ ¿ÀÁö ¾Ê´Â´Ù.
±×·¡¼ À̹ø ±Û¿¡¼´Â divergent¸¦ ¼ö·Å(convergent)¿¡ ´ëÀÀÇÏ´Â Àǹ̰¡ ¾Æ´Ñ ¡®´Ù¸¥¡¯ÀÇ ¶æÀ¸·Î ¼¼±â°í divergent change¸¦ ¡®¿©·¯ ¿øÀο¡ ÀÇÇÑ º¯°æ¡¯À̶ó ÇϰڴÙ. They hold divergent opinions on controversial issues like abortion(±×µéÀº ³«ÅÂ¿Í °°Àº ³í¶õÀÌ µÇ´Â À̽´¿¡ ´ëÇØ ¼·Î ´Ù¸¥ ÀǰßÀ» ÁÖÀåÇß´Ù)¿¡¼ÀÇ divergent ¿ë·Ê¸¦ Âü°íÇÏ¸é µÉ µíÇÏ´Ù. ÈçÈ÷µé ¡®È®»êÀû º¯°æ¡¯°ú µÚ¿¡ ¼Ò°³ÇÒ ¡®»êźÃÑ ¼ö¼ú¡¯À» Àß ±¸ºÐÇÏÁö ¸øÇϴµ¥ ¡®È®»êÀû º¯°æ¡¯À» ¡®¿©·¯ ¿øÀο¡ ÀÇÇÑ º¯°æ¡¯À¸·Î ¹Ù²Ù¾î ÀÌÇØÇϸé ÀÌ µÑÀÇ ±¸ºÐÀÌ Á¶±Ý ´õ Á÷°üÀûÀ¸·Î ´Ù°¡¿Ã °ÍÀÌ´Ù.
| | | | | |
| |
»êźÃÑ ¼ö¼ú
»êźÃÑÀ» ¹ß»çÇϸé ÇϳªÀÇ ÅºÈ¯ÀÌ ºÎ¼Áö¸é¼ ¿©·¯ °³ÀÇ ÅºÈ¯À¸·Î È®»êµÇ¾î ¹ß»çµÈ´Ù. µû¶ó¼ (»ó»óÇϱ⵵ ½ÈÁö¸¸) »êźÃÑÀ» ¸ÂÀº ´ë»óÀÇ ÃÑ»óÀº ¿Â¸ö Àüü¿¡ ÆÛÁö°Ô µÈ´Ù. ¸¸¾à ÀÌ·± ȯÀÚ¸¦ ¼ö¼úÇÏ´Â ÀÇ»ç´Â ¸¶Ä¡ ¼ö½Ê ¹ßÀÇ ÃÑÀ» ¸ÂÀº ȯÀÚ¸¦ ¼ö¼úÇÏ´Â °Íó·³ Èûµé °ÍÀÌ´Ù.
¡®»êźÃÑ ¼ö¼ú(shotgun surgery)¡¯Àº ¡®¿©·¯ ¿øÀο¡ ÀÇÇÑ º¯°æ¡¯°ú ºñ½ÁÇÑ µí Çϸ鼵µ Á¤ ¹Ý´ëÀÇ ³»¿ëÀ» °®´Â´Ù. ¡®¿©·¯ ¿øÀο¡ ÀÇÇÑ º¯°æ¡¯ÀÌ ÇϳªÀÇ Å¬·¡½º°¡ ¿©·¯ º¯°æ ¿øÀÎ(Ã¥ÀÓ)À» Áö´Ï´Â ¹Ý¸é, »êźÃÑ ¼ö¼úÀº ¾î¶² º¯°æÀÌ ÀÖÀ» ¶§ ¿©·¯ Ŭ·¡½º¸¦ ¼öÁ¤ÇØ¾ß ÇÏ´Â Áõ»óÀÌ´Ù. Áï ¾î¶² º¯°æÀÇ ´ë»óÀÌ ¿©·¯ °÷¿¡ ºÐÆ÷µÇ¾î ¸¶Ä¡ »êźÃÑ ÃÑ»ó ȯÀÚ¸¦ ¼ö¼úÇØ¾ß ÇÏ´Â °Í °°Àº ¸¹Àº ³ëµ¿ºñ¿ëÀÌ µû¸¥´Ù.
¡®»êźÃÑ ¼ö¼ú¡¯ÀÌ ±«·Î¿î ÀÌÀ¯´Â ´ÜÁö ¼ö¼ú ºÎÀ§°¡ ¸¹´Ù´Â °Í¸¸ÀÌ ¾Æ´Ï´Ù. ÀÌ ¼ö¼úÀ» ÇßÀ½¿¡µµ ºÒ±¸Çϰí Ȥ½Ã Ä¡·áÇÏÁö ¸øÇÑ »óó°¡ Á¸ÀçÇÒ ¼ö ÀÖ´Ù´Â °¡´É¼ºÀÌ ¡®»êźÃÑ ¼ö¼ú¡¯ÀÇ ´õ Å« À§Ç輺ÀÌ´Ù. °¡·É ÇϳªÀÇ Å×À̺íÀ» Á¶ÀÛÇÏ´Â DB 󸮹®ÀÌ ¾ÖÇø®ÄÉÀÌ¼Ç Àü¿ª¿¡ ÆÛÁ® ÀÖ´Â »óȲ¿¡¼ DB Å×À̺íÀÇ ±¸Á¶°¡ ¹Ù²î°Ô µÆÀ» °æ¿ì¿¡ ¹ß»ýÇÏ´Â Àç¾Ó°ú °°´Ù. ¼ö¼úµµ °íµÇÁö¸¸ ¸ðµç ȯºÎ¸¦ ã¾Æ¾ß ÇÏ´Â ÁýÁ߷°ú ±äÀå°¨ÀÌ °³¹ßÀÚ¸¦ ´õ¿í Èûµé°Ô ÇÑ´Ù.
 |
| <±×¸² 5> »êźÃÑ ¼ö¼ú |
»êźÃÑ ¼ö¼úÀ̶õ ¾ÇÃë´Â ÇϳªÀÇ Ã¥ÀÓÀÌ ¿©·¯ Ŭ·¡½º¿¡ ºÐ»êµÇ¾î Àֱ⠶§¹®¿¡ ¹ß»ýÇÑ´Ù. ÇÑ Å¬·¡½º°¡ ³Ê¹« ¸¹Àº Ã¥ÀÓÀ» ¸Ã°í À־ °ï¶õÇÏÁö¸¸, Ã¥ÀÓÀ» ½Äº°ÇÏÁö ¸øÇØ À̸¦ ´ã´çÇÒ Å¬·¡½º¸¦ ¸¸µéÁö ¾Ê°í ¿©·¯ Ŭ·¡½º¿¡ Èð»Ñ·Á ³õ´Â °Í ¶ÇÇÑ ¹®Á¦°¡ ÀÖ´Ù. ÀÌ´Â º¸Åë ÇÁ·Î±×·¥ÀÇ Àüü Ã¥ÀÓÀ» ¿Ã¹Ù·Î ºÐ´ãÇÏÁö ¸øÇؼ ¹ß»ýÇÏ°Ô µÈ´Ù.
ÀÌ ¾ÇÃë´Â Move Field¿Í Move Method¸¦ ÅëÇØ Ã¥ÀÓÀ» ±âÁ¸ÀÇ ¾î¶² Ŭ·¡½º·Î ¸ðÀ¸°Å³ª, ÀÌ·²¸¸ÇÑ Å¬·¡½º°¡ ¾ø´Ù¸é »õ·Î¿î Ŭ·¡½º¸¦ ¸¸µé¾î ÇØ°áÇÒ ¼ö ÀÖ´Ù. Áï »ê¹ßÀûÀ¸·Î ¿©·¯ °÷¿¡ ºÐÆ÷µÈ Ã¥ÀÓµéÀ» ÇÑ °÷¿¡ ¸ðÀ¸¸é¼ ¼³°è¸¦ ±ú²ýÇÏ°Ô ÇÑ´Ù. Áï ÀÀÁý¼ºÀ» ³ôÀÌ´Â ÀÛ¾÷ÀÌ ÇÊ¿äÇÏ´Ù.
»êźÃÑ ¼ö¼úÀÇ ³¿»õ´Â ƯÈ÷ ¼³Á¤ Á¤º¸(configuration information), ·Î±ë(logging), DB 󸮿¡¼ ¹ß»ýÇϱ⠽¬¿îµ¥ À̵éÀ» ´Ù·ê ¶§´Â Ç×»ó »êźÃÑ ¼ö¼úÀÇ ¾ÇÃ븦 °æ°èÇØ¾ß ÇÑ´Ù. ¿¹¸¦ µé¾î ÇÑ °÷¿¡¼ °ü¸®ÇÒ Çʿ䰡 ÀÖ´Â ¼³Á¤ Á¤º¸¸¦ ¿©·¯ Ŭ·¡½º¿¡¼ ³ª´©¾î ó¸®Çϰí ÀÖ´Ù¸é ÀÌ´Â »êźÃÑ ¼ö¼úÀ» ÇÒ ¼ö ÀÖ´Â ÁÁÀº º»º¸±â°¡ µÈ´Ù.
À̸¦Å×¸é ¾²·¹µå, Ä¿³Ø¼Ç, ¿ÀºêÁ§Æ® Ç®ÀÇ Å©±â °ªÀ̳ª DB, ¼¹öÀÇ ÁÖ¼Ò Á¤º¸µéÀ» °¢°¢ÀÇ Å¬·¡½º¿¡ ÀÚüÀûÀ¸·Î °ü¸®Çϰí ÀÖ´Ù¸é À̵éÀ» ¼³Á¤ ÆÄÀÏÀ̳ª ¼³Á¤ °ü¸®ÀÚ¿¡°Ô Move FieldÇÏ´Â °ÍÀÌ ¹Ù¶÷Á÷ÇÏ´Ù. ´õ ³ª¾Æ°¡ Ç÷¯±×ÀÎÀ» µµÀÔÇØ ¼³Á¤ Á¤º¸¸¦ ÅëÇØ µ¿ÀûÀ¸·Î ÇàÀ§ º¯È¸¦ ÅëÁ¦(Enable Configurable Behavior with Plugin)ÇÏ´Â °Íµµ »ý°¢ÇØ º¼¸¸ÇÏ´Ù. ¶ÇÇÑ XML 󸮳ª ÇÁ·ÎÅäÄÝ ÇØ¼®À» ´ã´çÇÏ´Â ¸Þ½îµå°¡ ¿©·¯ °÷¿¡ ºÐÆ÷µÇ¾ú´Ù¸é °¢°¢ÀÇ À¯Æ¿¼º Ŭ·¡½º·Î Move MethodÇÏ´Â °ÍÀÌ ¹Ù¶÷Á÷ÇÏ´Ù.
¡®¿©·¯ ¿øÀο¡ ÀÇÇÑ º¯°æ¡¯°ú ¡®»êźÃÑ ¼ö¼ú¡¯À̶õ ¾ÇÃ븦 SRP¸¦ ¾î±ä ½ÅÈ£·Î ¿©±â°í Á¦°ÅÇÑ´Ù¸é º¯°æÀÌ ¿©·¯ °÷À¸·Î È®»êµÇÁö ¾ÊÀ» »Ó ¾Æ´Ï¶ó Ã¥ÀÓÀ» ÀûÀýÈ÷ ºÐ¹èÇÔÀ¸·Î ÀÎÇØ ÄÚµåÀÇ °¡µ¶¼º Çâ»ó, À¯Áöº¸¼ö ¿ëÀ̶ó´Â ÀÌÁ¡±îÁö ´©¸± ¼ö ÀÖ´Ù. ¶ÇÇÑ ÀûÀýÇÑ Ã¥ÀÓ ºÐ¹è´Â °´Ã¼ÁöÇâ ¿ø¸®µéÀÇ ´ëÀüÁ¦ °ÝÀÎ OCP»Ó ¾Æ´Ï¶ó ´Ù¸¥ ¿ø¸®µéÀ» Àû¿ëÇÏ´Â ±âÃʰ¡ µÇ¾îÁØ´Ù.
 | ÇÙ½É ¸®ÆÑÅ丵 ±â¹ý°ú Ã¥ÀÓ ºÐ¹è |  | |  | |
| ¸®ÆÑÅ丵¿¡¼ ¼Ò°³ÇÏ´Â ´ëºÎºÐÀÇ ³¿»õµé(ÄÚ¸àÆ®, ºñ´ëÇÑ Å¬·¡½º¿¡¼ ½ÃÀÛÇØ »êźÃÑ ¼ö¼ú±îÁö)Àº °´Ã¼°£ÀÇ Ã¥ÀÓ ºÐ¹è¿Í Á÷°£Á¢ÀûÀ¸·Î °ü·ÃÀÌ Àִµ¥, Ç×»ó Äڵ带 ÃÖ»óÀ¸·Î À¯ÁöÇÑ´Ù´Â ¸®ÆÑÅ丵ÀÇ ±Ùº» Á¤½ÅÀº °ð Ç×»ó °´Ã¼µéÀÇ Ã¥ÀÓÀ» ÃÖ»óÀÇ »óÅ·ΠºÐ¹èÇÑ´Ù´Â °ÍÀ̱⠶§¹®ÀÌ´Ù. ±×¸®°í ´ÙÀ½ÀÇ ¸®ÆÑÅ丵 ±â¹ýµéÀº ¡®°´Ã¼µéÀÇ Ã¥ÀÓÀ» ÃÖ»óÀÇ »óÅ·ΠºÐ¹è¡¯ÇÏ´Â °¡Àå ±âº»ÀÌ µÈ´Ù.
Extract Class(6)
Move Method(6)
Extract Method(4)
Move Field(4)
À̵éÀº °¡Àå ¸¹Àº ³¿»õ¸¦ ÇØ°áÇÏ´Â ¸®ÆÑÅ丵 ±â¹ýµéÀ» Á¤¸®ÇÑ °ÍÀ¸·Î °ýÈ£ ¾ÈÀÇ ¼ýÀÚ´Â ³¿»õ¸¦ ÇØ°áÇÏ´Â µ¥ »ç¿ëµÈ ºóµµ¼öÀÌ´Ù. °í±Þ½º·´°í ¿ì¾ÆÇÑ °í±Þ ¸®ÆÑÅ丵 ±â¹ýÀ̳ª ºò ¸®ÆÑÅ丵 ±â¹ýÀº ¶§¶§·Î À¯¿ëÇÏÁö¸¸, À̵éÀº Ç×»ó À¯¿ëÇÏ´Ù.
ÇÊÀÚ´Â ¾ÕÀÇ 4°³ÀÇ ¸®½ºÆ®¿¡ ¡®Rename *¡¯¸¦ Ãß°¡ÇÏ¿© 5°³ÀÇ ¸®ÆÑÅ丵 ±â¹ýÀ» °¡Àå ´Ü¼øÇϸ鼵µ Áß¿äÇÑ ÇÙ½É ¸®ÆÑÅ丵 ±â¹ýÀ¸·Î ¿©±ä´Ù. ÆÄ¿ï·¯ÀÇ Ã¥¿¡´Â Rename Method¸¸ÀÌ ¼ö·ÏµÇ¾î ÀÖÁö¸¸, Rename Class, Rename Field, Rename Parameter ¿ª½Ã ±²ÀåÈ÷ ÀÚÁÖ ¾²ÀÌ¸ç ½ÇÁ¦ ÀÌŬ¸³½ºÀÇ ¸®ÆÑÅ丵 ±â´ÉÀ» º¸¸é ÀÌ ¸ðµÎ°¡ Çϳª·Î RenameÀ̶ó µÇ¾î ÀÖ´Ù. ±×¸®°í °æÇè¿¡ ºñÃß¾î º¸¸é ¾î´À ¸®ÆÑÅ丵 ±â´Éº¸´Ùµµ RenameÀ» ÀÚÁÖ »ç¿ëÇÏ°Ô µÈ´Ù. ¿Ã¹Ù¸¥ Ŭ·¡½º À̸§Àº ÇØ´ç Ŭ·¡½ºÀÇ Ã¥ÀÓÀ» ³ªÅ¸³¾ ¼ö ÀÖ´Â °¡Àå ÁÁÀº ¹æ¹ýÀÌ´Ù.
ÄÚµùÀ» ÇÏ¸é¼ Å°º¸µå ¾Õ¿¡ A4 ¿ëÁö¸¦ ³õ°í ¼ö½Ã·Î CRC Ä«µå, Ŭ·¡½º ´ÙÀ̾î±×·¥, ½ÃÄö½º ´ÙÀ̾î±×·¥À» °£·«È÷ ±×·Áº¸¸ç °´Ã¼µé °£ÀÇ Ã¥ÀÓÀ» Á¡°ËÇØ º¸°í, ¸®ÆÑÅ丵À» ¼öÇàÇÏ´Â °ÍÀº ºÐ¸í ÁÁÀº SRP¸¦ ¾î±â´Â Äڵ带 »çÀü¿¡ ¾î´À Á¤µµ ¹æÁöÇÒ ¼ö ÀÖ´Â ÁÁÀº ´ëºñÃ¥ÀÌ µÇ¾îÁÙ °ÍÀÌ´Ù. ÇÒ ¼ö¸¸ ÀÖ´Ù¸é, ¡®»çÈÄ ´ë󡯺¸´Ù´Â ¡®»çÀü ¿¹¹æ¡¯ÀÌ ´õ ÁÁÀº ÇØ°áÃ¥ÀÌÁö ¾ÊÀº°¡?
| | | | | |
| |
À§´ëÇÔº¸´Ù ´Ü¼øÇÔÀº ¾ø´Ù
´«µ¿ÀÚÀÇ ÃÊÁ¡ÀÌ ºÐ»êµÇ¸é ³½Ã°¡ µÇ°í ¸¶À½À̳ª Á¤½ÅÀÇ ÃÊÁ¡ÀÌ Á¤»óÀ» »ó½ÇÇÏ°í ºÐ»êÇÏ´Â »óŰ¡ Áö¼ÓµÇ¸é Á¤½ÅÂø¶õ ȤÀº Á¤½Å ºÐ¿ÀÌ ¿Â´Ù. ¸¶Âù°¡Áö·Î Ŭ·¡½º°¡ ÇϳªÀÇ Ã¥ÀÓ¿¡ ÁýÁßÇÏÁö ¸øÇÑ Ã¤ À̰ÍÀú°Í µÎ¸®¹ø°Å¸®´Â ¿©¿ì¿Í °°°í, ÀÌ·¯ÇÑ Å¬·¡½ºµéÀÌ ´©ÀûµÈ´Ù¸é ÇÁ·Î±×·¥Àº Á¡Á¡ À¯Áöº¸¼ö, º¯°æ¿¡ ´ëÀÀÇϱ⠾î·Á¿öÁø´Ù. ¾î¼¸é ¡®Åö¡¯Çϰí À߸ø °Çµå¸®¸é Á¤½ÅÂø¶õÀÌ ¿ÃÁöµµ ¸ð¸¦ ÀÏÀÌ´Ù.
¼ÒÇÁÆ®¿þ¾î´Â Ç×»ó º¯°æÀ» ÀüÁ¦ÇÑ´Ù. µû¶ó¼ º¯°æ¿¡ ¹Î°¨ÇÏ°Ô ¹ÝÀÀÇÏÁö ¸øÇÏ´Â ¼³°è´Â ÇÁ·ÎÁ§Æ®¸¦ Èûµé°Ô ÇÑ´Ù. ¡°¼ÒÇÁÆ®¿þ¾î ¼³°è¿¡´Â µÎ °¡Áö ¹æ¹ýÀÌ ÀÖ´Ù. ÇÑ °¡Áö´Â ºÐ¸íÈ÷ °áÇÔÀÌ ¾øµµ·Ï ´Ü¼øÇÏ°Ô ¼³°èÇÏ´Â °ÍÀÌ°í ´Ù¸¥ ÇÑ °¡Áö´Â ºÐ¸íÇÑ °áÇÔÀÌ ¾øµµ·Ï °¡´ÉÇÏ¸é º¹ÀâÇÏ°Ô ¼³°èÇÏ´Â °ÍÀÌ´Ù"¶ó´Â ¸í¾ðÀÌ ÀÖ´Ù.
SRP¸¦ Àû¿ëÇϸé Ŭ·¡½ºÀÇ ¼ýÀÚ°¡ ´Ã ¼ö´Â ÀÖ´Ù. ÇÏÁö¸¸ Ŭ·¡½º ¼ýÀÚÀÇ Áõ°¡°¡ ÇÁ·Î±×·¥ÀÇ º¹Àâµµ Áõ°¡¿Í ºñ·ÊÇÏ´Â °ÍÀº ¾Æ´Ï´Ù. ¿ÀÈ÷·Á SRP¸¦ Àß µû¸£´Â ÇÁ·Î±×·¥Àº ÀûÀýÇÑ Ã¥ÀÓ ºÐ¹è·Î ÀÎÇØ Ŭ·¡½º ¼ýÀÚ¿Í ÇÁ·Î±×·¥ÀÇ º¹Àâµµ°¡ ¹Ýºñ·ÊÇÏ´Â °æÇâÀÌ ÀÖ´Ù°íµµ ÇÒ ¼ö ÀÖ°Ô µÈ´Ù.
À§´ëÇÔº¸´Ù ´Ü¼øÇÔÀº ¾ø´Ù. ½ÇÁ¦·Î ´Ü¼øÇÑ °ÍÀÌ À§´ëÇÑ °ÍÀÌ´Ù. ±×¸®°í ÀÌ ´Ü¼øÇÔÀÇ Á߽ɿ¡´Â ´ÜÀÏ Ã¥ÀÓÀÇ ¿øÄ¢ÀÌ ÀÖ´Ù.@
* ÀÌ ±â»ç´Â ZDNet KoreaÀÇ Á¦ÈÞ¸ÅüÀÎ ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®¿þ¾î¿¡ °ÔÀçµÈ ³»¿ëÀÔ´Ï´Ù.