ÀÌ ¼½¼ÇÀº 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 Ŭ·¡½ºÀÇ µÎ °³ÀÇ ´Ù¸¥ ÀνºÅϽºÀÇ »ý¼ºÀ» ÇÇÇϱâ À§ÇØ »ý¼ºµË´Ï´Ù
|