Inline Method Refactoring  

 

ÀÌ ¼½¼ÇÀº ´ç½Å¿¡°Ô Inline Method  ¸®ÆÑÅ丵 »ó¿¡¼­ Æ÷°ýÀûÀΠ overview¿Í  how ÀÌ ¸®ÆÑÅ丵ÀÌ IntelliJ IDEA¿¡¼­ »ç¿ëµÉ ¼ö Àִ°¡¸¦ Á¦°øÇÕ´Ï´Ù.

°³¿ä


ÀϹÝÀûÀ¸·Î ¸»ÇÏÀÚ¸é, Inline Method   ¸®ÆÑÅ丵ÀÌ Extract Method ¿¡ ¹Ý´ëÀÔ´Ï´Ù.  Extract Method  ¸®ÆÑÅ丵 ¼öÇàÇϸé

IDEA´Â ±× È£ÃâÀÚÀÇ º¸µð¿¡ ¸Þ¼ÒµåÀÇ º¸µð¸¦ ³õÀ» °ÍÀÌ°í ¸Þ¼Òµå´Â »èÁ¦µË´Ï´Ù.


¹Ý¸é¿¡, ÀÌ ¸®ÆÑÅ丵À» Àû¿ëÇÏ¸é °ÍÀº ´ç½ÅÀº ¿À·ÎÁö ÇϳªÀÇ ¸Þ¼Òµå ÄÝÀ» ¼±ÅÃÇϰí, InlineÇϰí, ´Ù¸¥ Äݰú ¸Þ¼Òµå º¸µð¸¦ À¯ÁöÇÕ´Ï´Ù.


¿¹¸¦ µé¸é, ¿ì¸®´Â ´ÙÀ½ Äڵ带 °¡Áý´Ï´Ù:

 
    public class AClass {
        public int methodA(int param) {
            return methodB() + param;
        }
        private int methodB() {
            some code here
        }
    }
 
    ...
 
    public class AnotherClass {
        void foo (AClass aClass){
            int res = aClass.methodA(1);
        }
    }

 

±×¸®°í ´ç½ÅÀº methodA°¡ »ç½Ç Áߺ¹ÀÎ °ÍÀ» ¾Ë¾Ò½À´Ï´Ù.  À̰ÍÀº ¸®ÆÑÅ丵ÀÌ Àû¿ëµÇ°í ³­ ÈÄ¿¡ ÄÚµåÀÔ´Ï´Ù:
 
    public class AClass {
        private int methodB() {
            some code here
        }
    }
 
    ...
 
    public class AnotherClass {
        void foo (AClass aClass){
            int res = aClass.methodB() + 1;
        }
    }



Inlining Method  


¸Þ¼Òµå¸¦ inline Çϱâ À§Çؼ­

 1.   ¿øÇÏ´Â ¸Þ¼Òµå À̸§¿¡¼­ÀÇ ±× ¼±¾ð ¶Ç´Â Àκ¸ÄÉÀ̼ǿ¡ ÀÇ Ä³·µÀ» ¹èÄ¡Çϰí, ÁÖ ¸Þ´º¿¡¼­ ¶Ç´Â ¿¡µðÅÍ¿¡¼­ ¿À¸¥ÂÊ ¹öưÀ» Ŭ¸¯ÇÏ¿© ºÒ·ÁÁö´Â ÆË¾÷ ¸Þ´º¿¡¼­ Refactor Inline...  À» Ŭ¸¯Çϰųª OR  Ctrl + Alt + N À» ´©¸¨´Ï´Ù. ±×¸®°í ´ç½ÅÀº ´ÙÀ½ ´ÙÀ̾ó·Î±× À©µµ¿ì¸¦ º¼ °ÍÀÔ´Ï´Ù:


¸¸ÀÏ ¸®ÆÑÅ丵ÀÌ ¸Þ¼Òµå ¼±¾ðÀ¸·ÎºÎÅÍ È£ÃâµÇ¸é This invocation only and keep the method ¿É¼Ç ¹öưÀº ºÒ°¡´ÉÇÏ°Ô ÇÏ°Ô µÉ °Í ÀÔ´Ï´Ù.



 2.   ´ÙÀ̾ó·Î±×´Â ¿É¼Ç ±×·ì°ú üũ ¹Ú½º¸¦ °¡Áý´Ï´Ù:

Inline  

¸Þ¼Òµå°¡ ¾î¶»°Ô InlineµÇ´ÂÁö °áÁ¤ÇÕ´Ï´Ù:

 All invocations and remove the method  ¸ðµç ¸Þ¼Òµå Àκ¸ÄÉÀ̼ÇÀº ¸Þ¼Òµå º¸µð·Î ±³Ã¼µÉ °ÍÀÔ´Ï´Ù. ±×¸®°í ¸Þ¼Òµå ±× ÀÚü´Â Á¦°ÅµÉ °ÍÀÔ´Ï´Ù.
 
This invocation only and keep the method  - ¸Þ¼Òµå ±× ÀÚü°¡ À¯ÁöµÉ µ¿¾È ij·µÀÌ ÀÖ´Â Àκ¸ÄÉÀ̼ÇÀº ¸Þ¼Òµå º¸µð·Î ±³Ã¼µÉ °ÍÀÔ´Ï´Ù.

Preview invocations  to be inlined  

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


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


Refactoring Preview ´ÙÀ̾ó·Î±×¿¡¼­ (¸¸ÀÏ ±×°ÍÀÌ ³ªÅ¸³ª¸é) ´ç½ÅÀº ¼öÇàµÈ º¯°æÀ» ºÐ¼®ÇÒ ¼ö ÀÖ½À´Ï´Ù.  ¸®ÆÑÅ丵°ú ÇÔ²² ÁøÇàÇϱâ À§Çؼ­, Do Refactor¸¦ Ŭ¸¯ÇÕ´Ï´Ù±×·¸Áö ¾Ê´Ù¸é Cancel À» Ŭ¸¯ÇÕ´Ï´Ù. »ó¼¼ÇÑ °ÍÀ» º¸·Á¸é Refactoring Preview¸¦ º¸½Ê½Ã¿À.


¸¸ÀÏ This invocation only and keep the method   ¿É¼Ç ¹öưÀÌ ¼±ÅõǸé Preview invocations to be inlined üũ ¹Ú½º´Â ºÒ°¡´ÉÇÏ°Ô µË´Ï´Ù.



 3.   OK¸¦ Ŭ¸¯ÇϽʽÿÀ. ±×¸®¸é ¿øÇÏ´Â º¯¼ö´Â inline µÉ °ÍÀÔ´Ï´Ù.


Inline Method  ¸®ÆÑÅ丵À» Àû¿ëÇϴµ¥ ÀϺΠÁ¦ÇÑÀÌ ÀÖ½À´Ï´Ù.  IDEAÀº ½ÇÇà È帧ÀÌ ¸®ÅÏ ½ºÅ×ÀÌÆ®¸ÕÆ®¿¡ ÀÇÇØ Áß´ÜµÈ Àç±ÍÀû ¸Þ¼Òµå ¶Ç´Â ¸Þ¼Òµå¸¦ inlineÇÒ ¼ö ¾ø½À´Ï´Ù.

¿¹¸¦ µé¸é:  

 
     private int methodA(){
         int[] aaa = new int [10];
         for (int i = 0; i < aaa.length; i++) { i = aaa[i]; if (aaa[i] == 0) return i;
         }
         return -1;
     }
     

¿©±â¿¡¼­´Â methodA()  ¸Þ¼Òµå´Â inlineµÉ ¼ö ¾ø½À´Ï´Ù.  ±×·± °æ¿ì¿¡ ´ç½Å¿¡°Ô ¿¡·¯ ¸Þ½ÃÁö°¡  ÇÁ·ÒÇÁÆ®µÉ °ÍÀÔ´Ï´Ù.  ±× ´ÙÀ½ ´ç½ÅÀº ¼öµ¿À¸·Î ÇÊ¿äÇÑ ¸Þ¼Òµå¸¦ inlineÇØ¾ß¸¸ Çϰųª, Äڵ带 ¹æÇØÇÏ´Â °ÍÀ» Á¦¿ÜÇØ¾ß¸¸ Çϰųª, À̹ø¿¡ Inline Method   ¸®ÆÑÅ丵À» ÇÏ´Â °ÍÀ» ´Ü³äÇØ¾ß¸¸ ÇÕ´Ï´Ù.