¸Þ¼Òµå¸¦ Á¤ÀûÀÎ ¸®ÆÑÅ丵À¸·Î ¸¸µé±â

 

ÀÌ ¼½¼ÇÀº Make Method Static ¸®ÆÑÅ丵 À§¿¡¼­  overview¸¦ Á¦°øÇϰí how ÀÌ ¸®ÆÑÅ丵ÀÌ IntelliJ IDEA¿¡¼­ »ç¿ëµÉ ¼ö Àִ°¡¸¦ Á¦°øÇÕ´Ï´Ù.

°³¿ä


Make Method Static ¸®ÆÑÅ丵Àº ÀÌ ¸Þ¼Òµå¸¦ ´Ù¸¥ Ŭ·¡½º·Î À̵¿ÇÏ´ÂMove Members ¸®ÆÑÅ丵¿¡ ´ëÇÑ ¿¹ºñÀÇ ´Ü°è »Ó¸¸¾Æ´Ï¶ó Ŭ·¡½º ÀνºÅϽº¸¦ »ý¼ºÇÏÁö ¾Ê°í ÀÌ ¸Þ¼Òµå¸¦ À¯¿ëÇÑ ±â´ÉÀ¸·Î ¸¸µé±â À§ÇØ ºñÁ¤ÀûÀÎ ¸Þ¼Òµå¸¦ Á¤ÀûÀÎ °ÍÀ¸·Î º¯È¯Çϴµ¥ »ç¿ëµÈ´Ù. Ÿ°Ù ¸Þ¼Òµå°¡ Á¤ÀûÀ¸·Î ¼±¾ðµÉ ¸®ÆÑÅ丵 ÀÌÈÄ, ±×¸®°í ¾î´À °ÍÀÌ ÀÖ´Ù¸é Ŭ·¡½º·ÎºÎÅÍ ÇÊ¿äÇÑ ¸Å°³ º¯¼ö´Â Ãß°¡µÉ °ÍÀÔ´Ï´Ù.


¿¹¸¦ µé¸é, ´ÙÀ½ Äڵ尡 ¸®ÆÑÅ丵 ÀÌÀü¿¡ ÀÖ½À´Ï´Ù.  ´ç½ÅÀº µÎ °³ÀÇ Å¬·¡½º¸¦ °¡Áý´Ï´Ù:

 
public class ConnectionPool{
    HashMap mPool;
 
    Connection getConnection(String name){
        return (Connection) mPool.get(name);
    }
}
 
public class Processor{
    ConnectionPool myCP;
 
    void detach(String name){
        myCP.getConnection(name).abortConnection();
    }
}

 

±×¸®°í ±×°ÍÀº getConnection ¸Þ¼Òµå¸¦ Á¤ÀûÀ¸·Î ¸¸µé±â¿¡ ½±½À´Ï´Ù.  ´ç½ÅÀÇ ¼±Åÿ¡ µû¶ó, ¸®ÆÑÅ丵Àº ´ÙÀ½ µÎ °³ÀÇ °á°ú ÁßÀÇ ÇÑ °³¸¦ °®°í ³ª°¥ ¼ö ÀÖ½À´Ï´Ù:


¸¸ÀÏ ´ç½ÅÀÌ Å¬·¡½º ÀνºÅϽº¸¦ ÂüÁ¶ÇÏ´Â ¸Å°³ º¯¼ö¸¦ ÇÊ¿ä·Î Çϸé:

 
public class ConnectionPool{
    HashMap mPool;
 
    static Connection getConnection(ConnectionPool connectionPool, String name){
        return (Connection) connectionPool.mPool.get(name);
    }
}
 
public class Processor{
    ConnectionPool myCP;
 
    void detach(String name){
        ConnectionPool.getConnection(myCP, name).abortConnection();
    }
}


¶Ç´Â ´ç½ÅÀÌ ¸Å°³ º¯¼ö·Î¼­ ºñ Á¤ÀûÀÎ Çʵ带 Åë°úÇÏ°í ½Í¾îÇÑ´Ù¸é:

 
public class ConnectionPool{
    HashMap mPool;
 
    static Connection getConnection(HashMap mPool1, String name){
        return (Connection) mPool1.get(name);
    }
}
 
public class Processor{
    ConnectionPool myCP;
 
    void detach(String name){
        ConnectionPool.getConnection(myCP.mPool, name).abortConnection();
    }
}

 

¸Þ¼Òµå¸¦ Á¤ÀûÀ¸·Î ¸¸µé±â


¸Þ¼Òµå¸¦ Á¤ÀûÀ¸·Î ¸¸µé±â À§ÇØ, ù ¹øÂ°·Î ij·µÀ» ¼±¾ð À§ÀÇ ¿¡µðÅÍ ¶Ç´Â ´ç½ÅÀÌ Á¤ÀûÀ¸·Î µÇ±â¸¦ ¿øÇÏ´Â ¸Þ¼ÒµåÀÇ ÄÝÀ» ¼³Á¤ÇϽʽÿÀ.



¸ÞÀÎ ¸Þ´º¿¡¼­ ¶Ç´Â ¿¡µðÅÍ¿¡¼­ ¿À¸¥ÂÊ ¹öưÀ» Ŭ¸¯ÇÏ´Â °Í¿¡ ÀÇÇØ ºÒ·ÁÁö´Â ÆË¾÷ ¸Þ´º¿¡¼­ Refactor Make Method Static...  À» Ŭ¸¯ÇϽʽÿÀ.

¸¸ÀÏ ¸Þ¼Òµå°¡ ¾î¶² Ŭ·¡½º ±¸¼º ¿ä¼Ò¸¦ »ç¿ëÇÏ¸é ´ÙÀ½ÀÇ Introduce Parameter ´ÙÀ̾ó·Î±×°¡ ³ªÅ¸³³´Ï´Ù:



´ÙÀ̾ó·Î±×´Â ´ÙÀ½ÀÇ Á¦¾î¸¦ °¡Áý´Ï´Ù:

À̸§ÀÌ ÀÖ´Â ¸Å°³ º¯¼ö·Î¼­ÀÇ °´Ã¼ Ãß°¡


¸¸ÀÏ Ã¼Å©Çϸé, ¸Þ¼Òµå ¼±¾ð°ú ÄÝ·Î ¸Å°³ º¯¼ö·Î¼­ÀÇ Å¬·¡½º ÀνºÅϽº¸¦ Ãß°¡ÇÕ´Ï´Ù.


¸¸ÀÏ Å¸°Ù ¸Þ¼Òµå°¡ ±× Ŭ·¡½ºÀÇ ºñ Á¤ÀûÀÎ ¸Þ¼Òµå¸¦ »ç¿ëÇϸé ÀÌ Ã¼Å© ¹Ú½º´Â ÀÚµ¿ÀûÀ¸·Î ¼±Åõ˴ϴÙ.  ¸¸ÀÏ ´ç½ÅÀÌ ±×·± ºñ Á¤ÀûÀÎ ¸Þ¼Òµå¸¦ À§ÇØ Ã¼Å© ¹Ú½º¸¦ ÇØÁ¦Çϸé Problems Detected ´ÙÀ̾ó·Î±×¿Í ÇÔ²² °æ°í ¹Þ°Ô µÉ °Í ÀÔ´Ï´Ù. ¸¸ÀÏ ´ç½ÅÀÌ ±×°ÍÀ» ¹«½ÃÇϰí Continue¸¦ ´©¸£¸é ¸®ÆÑÅ丵Àº Àû¿ëµÉ °ÍÀ̳ª °á°ú ÄÚµå´Â ÄÄÆÄÀÏÀÌ ¾ÈµÉÁöµµ ¸ð¸¨´Ï´Ù.

Çʵ忡 ´ëÇÑ ¸Å°³ º¯¼ö Ãß°¡

¸¸ÀÏ Ã¼Å©ÇÏ¸é ¸Þ¼Òµå¿¡ ÀÇÇØ »ç¿ëµÇ´Â ÇʵåÀÇ ¸ñ·ÏÀ» »ç¿ë °¡´ÉÇÏ°Ô ÇÕ´Ï´Ù.  ¸ñ·Ï¿¡¼­ ´ç½ÅÀº ¸Þ¼Òµå¿¡ ¸Å°³ º¯¼ö·Î¼­ ³Ñ¾î°¡´Â ºñ Á¤ÀûÀÎ Çʵ带 ¸Þ¼Òµå ¼±¾ð/ÄÝ¿¡¼­ ÇʵåÀÇ ¼ø¼­¸¦ º¯°æÇÏ´Â Move Up  / Move down ¹öưÀ» »ç¿ëÇÏ¿© ¼±ÅÃÇϰųª/¼±ÅÃÇÏÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù.


¸¸ÀÏ Å¸°Ù ¸Þ¼Òµå°¡ ±× Ŭ·¡½ºÀÇ ºñ Á¤ÀûÀÎ Çʵ带 »ç¿ëÇϸé ÀÌ Ã¼Å© ¹Ú½º´Â ÀÚµ¿ÀûÀ¸·Î ¼±Åõ˴ϴÙ.  ¸¸ÀÏ ´ç½ÅÀÌ ±×·± ºñ Á¤ÀûÀÎ Çʵ带 À§ÇØ Ã¼Å© ¹Ú½º¸¦ ÇØÁ¦ÇÏ¸é ¸®ÆÑÅ丵Àº Àû¿ëµÉ °ÍÀ̳ª °á°ú ÄÚµå´Â ÄÄÆÄÀÏÀÌ ¾ÈµÉÁöµµ ¸ð¸¨´Ï´Ù.


¸¸ÀÏ ´ç½ÅÀÌ Å¸°Ù ¸Þ¼Òµå¿¡ ÀÇÇØ »ç¿ëÇÏ´Â ºñ Á¤ÀûÀÎ Çʵ带 ¼±ÅÃ ÇØÁ¦ÇÏ¸é  Problems Detected ´ÙÀ̾ó·Î±×¿Í ÇÔ²² °æ°í ¹Þ°Ô µÉ °Í ÀÔ´Ï´Ù. ¸¸ÀÏ ´ç½ÅÀÌ ±×°ÍÀ» ¹«½ÃÇϰí Continue¸¦ ´©¸£¸é ¸®ÆÑÅ丵Àº Àû¿ëµÉ °ÍÀ̳ª °á°ú ÄÚµå´Â ÄÄÆÄÀÏÀÌ ¾ÈµÉÁöµµ ¸ð¸¨´Ï´Ù.

º¯°æµÈ ¹Ì¸® º¸±â »ç¿ë

ÀÌ Ã¼Å© ¹Ú½º¸¦ ¼±ÅÃÇÏ¸é ´ç½ÅÀº ¾î¶² »ç¿ëÀÌ ¹ß°ßµÇ¾ú´ÂÁö ÃßÀûÇϰí, ±×µéÀÇ ±³Ã¼¸¦ ½ÂÀÎÇϵµ·Ï Çã¶ôÇÕ´Ï´Ù.  ÀÌ Ã¼Å© ¹Ú½º°¡ ¼±ÅõÇÁö ¾ÊÀ» ¶§, IDEA´Â ±³Ã¼¸¦ ÀÚµ¿ÀûÀ¸·Î ¼öÇàÇÕ´Ï´Ù.


½ÉÁö¾î üũ ¹Ú½º°¡ ¼±ÅõÇÁö ¾Ê¾ÒÀ» ¶§µµ, ¸¸ÀÏ ¹ß°ßµÈ »ç¿ëÀÌ ¾î¶² Àбâ Àü¿ë ÆÄÀÏ¿¡¼­ Á¸ÀçÇÏ¸é ´ç½ÅÀº »ç¿ë ±³Ã¼¸¦ È®ÀÎÇÏ´Â ÇÁ·ÒÇÁÆ®°¡ ´ç½Å¿¡ ´ë±âµÉ °Í ÀÔ´Ï´Ù.


¸¸ÀÏ Å¬·¡½º ±¸¼º ¿ä¼ÒÀÇ ¾î´À °Íµµ Ÿ°Ù ¸Þ¼Òµå¿¡ ÀÇÇØ »ç¿ëµÇÁö ¾ÊÀ¸¸é, Make Method Static ´Â ´ÙÀ½°ú °°ÀÌ º¸ÀÏ °ÍÀÔ´Ï´Ù:



±×°ÍÀº µÎ üũ ¹Ú½º¸¦ °¡Áý´Ï´Ù:

Replace usage  qualifiers with class references  

¸¸ÀÏ Ã¼Å©µÇ¸é, Ŭ·¡½º À̸§°ú ÇÔ²² Ŭ·¡½º »ç¿ë ¼ö½Ä¾î¸¦ ±³Ã¼ÇÕ´Ï´Ù.

Preview usages  to be changed  

À§¸¦ º¸½Ê½Ã¿À.

 

ºÎÀÛ¿ë


Make Method Static ¸®ÆÑÅ丵À» Àû¿ëÇÏ¸é ´ç½ÅÀº °¡´ÉÇÑ ºÎÀÛ¿ëÀ» ¾Ë°í ÀÖ¾î¾ß¸¸ ÇÕ´Ï´Ù. ¸¸ÀÏ ÇÁ·Î¼¼¼­ Ŭ·¡½º¿¡¼­¶ó¸é ´ç½ÅÀº ´ÙÀ½ÀÇ Äڵ带 °¡Áý´Ï´Ù:

 
public class Processor{
    void detach(String name){
        ArrayList connectionPools = new ArrayList();
 
        for (Iterator iterator = connectionPools.iterator(); iterator.hasNext();) {
            ((ConnectionPool) iterator.next()).getConnection(name).abortConnection();
        }
    }
}

 

¸®ÆÑÅ丵 ÈÄ¿¡ Äڵ尡 ÀÖ½À´Ï´Ù

 
public class Processor{
    void detach(String name){
        ArrayList connectionPools = new ArrayList();
 
        for (Iterator iterator = connectionPools.iterator(); iterator.hasNext();) {
            ConnectionPool.getConnection(((ConnectionPool) iterator.next()).aInt,
                                         ((ConnectionPool) iterator.next()).mPool, name).abortConnection();
        }
    }
}

 

´ç½ÅÀÌ º¼ ¼ö ÀÖ´Â °Í¿¡ µû¶ó, iterator ´Â ½ÇÁ¦·Î À߸øµÈ ÇʵåÀÇ °¢°¢¿¡ ´ëÇØ µÎ ¹è·Î ´Ã¾î³³´Ï´Ù.  ±×·¯³ª, IDEA´Â ÁõºÐ/°¨·®/´ëÀÔ ¿¬»êÀ¸·Î¼­ÀÇ ±×·± °æ¿ì¸¦ Àӽà º¯¼ö¸¦ »ç¿ëÇϰí new Ű¿öµå¸¦ »ç¿ëÇÏ¿© ¼º°øÀûÀ¸·Î ¹®Á¦¸¦ ÇØ°áÇÒ ¼ö ÀÖ½À´Ï´Ù.


¿¹¸¦ µé¸é

 
public class Processor{
    void detach(String name){
        new ConnectionPool().getConnection(name).abortConnection();
    }
}

 

±×¸®°í ¿©±â¿¡ ¸®ÆÑÅ丵 ÈÄÀÇ Äڵ尡 ÀÖ½À´Ï´Ù.

 
public class Processor{
    void detach(String name){
        final ConnectionPool connectionPool = new ConnectionPool();
        ConnectionPool.getConnection(connectionPool.aInt, connectionPool.mPool, name).abortConnection();
    }
}


Àӽà º¯¼ö´Â ºñ Á¤ÀûÀÎ Çʵ忡 ´ëÇÑ ConnectionPool Ŭ·¡½ºÀÇ µÎ °³ÀÇ ´Ù¸¥ ÀνºÅϽºÀÇ »ý¼ºÀ» ÇÇÇϱâ À§ÇØ »ý¼ºµË´Ï´Ù