ÀÌ ¼½¼ÇÀº ´ç½Å¿¡°Ô 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;
}
}
¸Þ¼Òµå¸¦ 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 ¸®ÆÑÅ丵À» ÇÏ´Â °ÍÀ» ´Ü³äÇØ¾ß¸¸ ÇÕ´Ï´Ù.
|
|