티스토리 뷰

Java & Kotlin

[Kotlin] 인텔리제이(IntelliJ)에서 코틀린 move instance method(다른 클래스로 메소드 옮기기) 리팩토링 기능 활성화하기

망나니개발자 2024. 2. 13. 10:00
반응형

 

 

1. 코틀린에서 move instance method 리팩토링 기능 활성화하기


[ move instance method 리팩토링 기능 소개 ]

예를 들어 신용카드를 발급하는 유스케이스가 있고, 신용카드 발급을 위해서는 기본적으로 사용자가 20세 이상의 성인이여야 한다고 하자. 해당 코드는 자바로 다음과 같이 구현할 수 있다.

@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class User {

    private int age;

}

@Service
@RequiredArgsConstructor
class IssueCreditCardUseCase {

    public void issue(User user) {
        if (isAdult(user)) {
            ...
        }

        ...
    }

    private boolean isAdult(User user) {
        return user.getAge() >= 20;
    }
}

 

 

하지만 이렇게 작성된 코드는 문제가 하나 있는데, 사용자가 성인인지 검사하는 핵심 비즈니스 로직이 여러 유스케이스에 걸쳐 퍼질 수 있다는 것이다. 예를 들어 카드 목록을 조회하는 경우에도 성인이 아닌 경우에는 체크카드만을 반환하도록 처리해야 한다. 따라서 다음과 같이 성인인지 검사하는 핵심 비즈니스 로직이 분산되게 된다.

@Service
@RequiredArgsConstructor
class GetCardsUseCase {

    public void getAll(User user) {
        if (isAdult(user)) {
            return getAllCards();
        }

        return getCheckCardsOnly();
    }

    private boolean isAdult(User user) {
        return user.getAge() >= 20;
    }
}

 

 

이러한 핵심 비즈니스 로직은 User 클래스 내부에 존재하여 여러 유스케이스에서 재사용할 수 있도록 해야 하는데, 이를 유스케이스에서 도메인으로 간편하게 옮기기 위해 move instance method 리팩토링 기능을 사용할 수 있다. 옮기기를 원하는 메소드 위에 커서를 두고 F6 키를 누르면 다음과 같이 메소드를 옮기도록 리팩토링할 수 있다.

 

 

그러면 다음과 같이 해당 메소드가 도메인 안으로 이동됨을 확인할 수 있다.

 

 

만약 리팩토링 기능을 사용하고 싶은데, 단축키 기억이 안난다면 Control + T를 눌러 Refactor This 창을 열어서도 확인할 수 있다. 해당 창에서 키워드를 검색하면 동일하게 사용할 수 있다.

 

 

하지만 해당 리팩토링 기능은 코틀린 언어에서 기본적으로 지원하지 않는다. 해당 기능을 사용하려고 하면 다음과 같이 에러가 발생하여 기능을 사용할 수 없다.

 

 

 

 

[ move instance method 리팩토링 기능 활성화하기 ]

해당 기능을 활성화하면 리팩토링 기능을 사용할 수 있으므로 다음과 같이 활성화해주도록 하자.

  1. Command + Shift + A를 입력하여 Actions 탭 열기
  2. Registry 검색



  3. kotlin.enable.move.method.refactoring 활성화하기

 

 

아직 해당 기능이 완벽하게 동작하지는 않는다. 자바의 경우에는 접근제어자(가시성)을 유연하게 변경해주었는데, 코틀린에서는 이를 지원하지 못한다. 해당 부분은 아쉽지만 그래도 리팩토링 필수 기능이니 반드시 설정해주도록 하자.

 

 

 

 

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함