IDE & Apps/IntelliJ Idea

깃털보다 가벼운 인텔리J (IntelliJ) IDEA 팁 6

Figo Kim 2016. 5. 11. 17:32
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

오늘도 이전 포스팅에 연결해서 refactoring 기능에 대해서 적어볼까 합니다.

이전 포스팅은 아래 링크에서 확인하실 수 있습니다.


2016/05/10 - [IDE & Apps/IntelliJ Idea] - 깃털보다 가벼운 IntelliJ(인텔리J)팁 5 - Class & Method Signature변경


오늘 알아볼 refactoring 기능은 Static method를 non-static method로 변경하는 기능과 variable encapsulation기능입니다.

Static method를 non-static method로 변경하기


우선 위와 같이 3개의 class가 있습니다.

MainClass에 문제의 static 메소드가 하나 존재합니다.


해당 메소드를 non-static method로 변경해보고자 합니다. 문제의 메소드에 커서를 위치시킨 후 마우스 오른쪽 버튼을 눌러서 Refactoring --> Convert To Instance Method를 선택합니다.


또는 메뉴 Refactoring --> Convert To Instance Method를 선택하실 수도 있습니다.

이 경우에도 마찬가지로 커서는 반드시 대상이 되는 method에 위치해 있어야 합니다.


선택 후에는 아래와 같이 팝업이 나타나며, 어떻게 변경할 것인지 선택할 수 있습니다.

좌측의 Class 목록은 MainClass에서 이미 생성되어진 Class 객체 instance 목록입니다.

오른쪽은 instance method로 변경될 때, 변경되는 method의 접근제어자를 어떻게 할 것인지 선택하는 부분입니다.


대상 Class : ClassB classB, 

Visibility를 public으로 선택 후, Refactor를 누릅니다.


그러면 기존의 MainClass에서의  static method는 ClassB의 instance method로 변경이 되고, MainClass에서의 호출 부분도 ClassB의 함수를 호출하는 형태로 변경됩니다. 물론 MainClass의 static 함수는 ClassB의 public 범주로 한정된 instance method로 추가가 되어 있습니다.


변수 Encapsulation 적용하기

Encapsulation에 대한 설명은 생략합니다. IntelliJ를 쓰시는 분이라면 이미 충분히 인지하고 있는 개념일꺼라 생각이 들어서요~~ ㅎㅎ

위와 같이 모델 Class와 이를 호출하는 MainClass가 있다고 가정합니다.

모델 Class의 구성 변수들의 scope은 public으로 되어 있습니다.


보시다시피 MainClass에서 직접 ModelClass의 멤버 변수들을 직접 호출해서 값을 지정할 수 있습니다.


현 상황에서 변수들에 대한 Encapsulation을 적용하기 위해서는 커서를 대상이 되는 class ( ModelClass)에 위치시킨 후, 마우스 오른쪽 버튼을 누른 후, Refactor --> Encapsulate Fields를 선택 하거나 또는 상단 메뉴에서 선택하실 수 있습니다. 


선택 후 아래와 같은 팝업창이 나타납니다.

- Fields to Encapsulate : 대상이 되는 멤버 변수를 선택하실 수 있습니다. 이때 Getter / Setting에 대한 함수명도 지정하실 수 있습니다.


- Encapsulate : 선택된 멤버 변수에 대해서 Get / Set 설정 여부와 refactoring을 하면서 호출하는 모든 부분을 accessor를 통해서 접근하고자 한다면 Use accessors even when field is accessible을 체크해주시면 됩니다.


- Encapsulated Fields' Visibility & Accessor' visibility : 대상이 되는 멤버 변수 및 이에 대한 접근하는 Accessor에 대한 접근제어자를 지정하실 수 있습니다.기본적으로 멤버 변수의 접근제어자는 private으로 accessor를 public으로 설정되어 있습니다.


설정 후, Refactor를 누르면 실행이 됩니다.



실행 후 아래와 같이 ModelClass를 보면 멤버 변수에 대한 접근 제어자는 private으로 바뀌고, 각 멤버 변수에 대한 getter / setter accessor가 public 접근 범위로 생성된 것을 확인하실 수 있습니다.

물론 이를 호출하는 MainClass에서도 accessor를 통해서 변수값을 설정해주는 것을 보실 수 있습니다.