Extract Interface Refactoring  

 

섹션은 Extract Interface 리팩토링 위에서 당신에게 포괄적인 overview how  리팩토링이 IntelliJ IDEA에서 사용될 있는가를 제공합니다.

개요


Extract Interface 리팩토링과 더불어 당신은 옵션을 가집니다.   번째(Extract Interface)  클래스의 메소드를 기초로 하는 인터페이스를 생성하도록 허락합니다.

 

번째 (Rename original class and use interface where possible)  원래의 클래스의 이름을 변경하고 새롭게 생성된 인터페이스를 구현합니다. 그런 경우, 가능하면 IDEA 그때 인터페이스를 사용하기 위해 모든 원래의 클래스 사용을 바꿉니다 (그리고 그것이 있지 않은 곳에서 그것들을 변경하지 않을 것입니다).

 

또한, 최초의 클래스에서 선언된 정적인 최종적인 필드는 인터페이스로 이동될 있습니다.   결과, 인터페이스는 특정의 메소드와 필드를 포함하면서 생성될 것입니다.   때문에, 정의된 클래스 메소드는 상응하는 인터페이스 메소드의 구현이 됩니다.

 

Extract Interface 옵션을 위한 예제 코드

우리는 다음의 클래스를 가집니다:

 
class AClass {
    public static final double CONSTANT=3.14;
    public void publicMethod() {//some code here}
    public void secretMethod() {//some code here}
}

리팩토링 이후, 새로운 인터페이스는 생성될 것입니다:

public interface AnInterface {
    double CONSTANT=3.14;
    void publicMethod();
}


소스 클래스는 인터페이스를 실행할 것입니다:

 
class AClass implements AnInterface {
    public void publicMethod() {//some code here}
    public void secretMethod() {//some code here}
}
     

만일 Rename original class and use interface where possible  옵션이 선택되면 코드를 예시하십시오:

public class FormerAClass implements AClass {
    public void publicMethod() {//some code here }
    public void secretMethod() {//some code here}
}
 
그리고 이전의 클래스의 이름을 가지는 새롭게 생성 인터페이스:  
 
public interface AClass {
    double CONSTANT=3.14;
 
    void publicMethod();
}
 

당신은 다른 인터페이스를 이미 실행하는 클래스로부터 인터페이스를 추출할 있습니다. AnInterface 수행하는 클래스로부터 extract interface 합니다. 우리는 AnotherInterface(추출된 메소드) AnInterface (기존의 ) 확장되기를 원하는지 또는 그들을 이행할 소스 AClass 우리가 원하는지 따라서 우리는 다음의 코드를 얻게 것입니다.


Extracted Interface extends the existing one Source class:

 
class AClass implements AnotherInterface {
    public void publicMethod() { //some code here }
    public void secretMethod() { //some code here }
}
 

Extracted Interface: 

 
public interface AnotherInterface extends AnInterface {
}
 

Source class implements both interfaces  

Source class: 

 
 class AClass implements AnInterface, AnotherInterface {
    public void publicMethod() { //some code here }
    public void secretMethod() { //some code here }
}

Extracted Interface: 

public interface AnotherInterface {
}

인터페이스가 추출되었더라면, IDEA 클래스의 사용을 검색하고, 인터페이스의 사용으로 그들을 가능하면 교체할 것을 제안할 것입니다.  당신은 IDEA 동작을 자동적으로 수행하게 있거나, 사용이 발견되고, 그들의 교체를 승인하는 것의 정보를 계속 얻을 있습니다.

예제 코드:

class AClass implements AnInterface {
    public void publicMethod() {//some code here}
    public void secretMethod() {//some code here}
 
}
    ...
    ...
 
//This usage can be modified by changing the
//parameter type from 'AClass' to 'AnInterface'
 
 void foo (AClass aClass){
    aClass.publicMethod();
}
 
...

  
...

  
 
//This usage will not be suggested for 
//refactoring because it is not specified in the interface
 
void bar (AClass aClass){
    aClass.secretMethod();
}
 

인터페이스 추출


클래스로부터 인터페이스를 추출하기 위해 다음을 합니다:

 1.   Project 보기에서 클래스를 선택하거나 문서 편집기에서 클래스 내에서 캐럿을 어느 곳에 배치하십시오, 그리고 Extract Interface  팝업 메뉴로부터 또는 Refactor 메뉴로부터 고르십시오.


당신은 또한 클래스를 Structure, Commander, Source 등과 같은 다른 보기에서 고를 있습니다.



 2.    후에, 다음 윈도우는 리팩토링 매개 변수를 지정하기 위해 나타날 것입니다:



번째로, 옵션(Extract Interface  또는 Rename original class and use interface where possible ) 버튼 중의 개를 선택하십시오. 그리고 나서 Interface name  또는 Rename original class to 텍스트 필드에서 인터페이스에 대한 이름 또는 원본 클래스에 대한 새로운 이름을 지정하십시오

Members to Form Interface 패널에서, 당신이 인터페이스에 포함되기를 원하는 메소드와 필드를 선택하십시오.


당신의 클래스는 다른 인터페이스를 이미 실행했습니다.   경우, 인터페이스는 Members to Form Interface 목록에서 나타날 것입니다.  만일 당신이 추출한 인터페이스가 기존 하나를 확장하기를 원하면, 당신은 목록에서 그것을 선택해야만 합니다.  만일 그렇지 않다면, 인터페이스를 선택되지 않게 하십시오. 그러면 클래스는 추출하고 기존 인터페이스를 실행할 것입니다.



JavaDoc 그룹에서, 새로운 인터페이스가 생성될 Javadoc 다루어져야만 하는 옵션 버튼을 선택하십시오.

As is  

??? 

Copy  

??? 

Move  

??? 



 3.   OK  클릭하십시오, 그리고 새로운 인터페이스는 생성될 것입니다.

 4.    , 만일 당신이 Extract Interface  옵션 버튼을 선택하면, 다음 윈도우가 나타날 것입니다:



만일 당신이 IDEA 클래스의 사용을 분석하고, 가능하면 인터페이스의 사용으로 그들을 교체하기 바라면, Yes  클릭하십시오, 그렇지 않다면 No 클릭하십시오.  상세한 것은 미리 보기를 보십시오.

Preview usages to be changed 체크 박스를 체크하면 당신에게 사용이 발견되고, 그들의 교체를 승인하는 정보를 계속 얻는 것을 허락합니다.  체크되지 않을 , IDEA 교체를 자동적으로 수행합니다.


심지어 체크 박스가 확인되지 않았을 때도, 만일 발견된 사용이 어떤 읽기 전용 파일에서 존재하면 당신에게 사용 교체를 확인하기 위해 프롬프트 입니다.