|
이 섹션은 당신에게 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 - 메소드 그 자체가 유지될 동안 캐럿이 있는 인보케이션은 메소드 보디로 교체될 것입니다.
|
|
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 리팩토링을 하는 것을 단념해야만 합니다.
|
|