Java는 객체지향 프로그래밍 언어이지만,
실제 개발을 진행하다보면 절차지향적인 코드를 구현할 때가 많이 있습니다.
이러한 절차지향적인 코드는 코드의 진행순서를 읽기 쉽다는 장점이 있으나
로직의 재사용성이 떨어지고 유지보수를 어렵게 만듭니다.
그래서, 객체지향의 5대 개발원리(SOLID) 중 하나인 단일책임원칙(SRP, Single Responsibility)에 의하여
두 개 이상의 역할을 수행하는 코드들은 하나의 기능을 하도록 분리하는 것이 좋습니다.
이를 자바에서는 메서드 분리(Method Extract)라고 합니다.
메서드분리는 다음과 같은 장점을 가지고 있습니다.
맴버변수의 쓰임을 제한하여, 예상치 못한 변수 사용을 막을 수 있다.
변수를 위쪽에 몰아서 선언하는 경우,
메서드분리가 제대로 되어있지 않으면 코드를 읽는 사람이
중간에 변수가 바뀌는 것을 눈치채지 못할 수 있습니다.
이는 컴파일 시점에 드러나지 않으므로 오류의 원인이 되는 객체와 오류가 발생하는
물리적 지점의 거리가 멀어지는 원인이 됩니다.
각 기능간의 의존성이 낮아지기 때문에, 유지보수가 쉽고 편해진다
파일함의 업로드 기능을 예시로 들면, “업로드”와 “로그 남기기” 기능을
메서드분리한다면 로그 남기기 기능에 다소 변경사항이 있더라도
“업로드” 기능에는 영향을 주지 않으므로 기능을 더 쉽게 변경할 수 있습니다.
코드 맥락(Context)의 가독성이 높아진다
** 절차지향적 코드는 if문 중첩이 조금만 반복되어도 맥락을 매우 파악하기 어렵습니다.
2천줄을 읽은 후에, 갑자기 else문이 등장했다면 과연 2천줄 전의 조건을 기억할 수 있을까요?
메서드분리는 몇천줄의 코드를 한 줄의 메서드로 줄일 수 있기 때문에,
중첩 if문이라 하더라도 어떤 조건을 이용하는지를 빠르게 파악할 수 있습니다.
이렇게 코드를 리팩토링 하면서 메서드분리를 염두에 둔다면
예상치 못한 변수의 변경 및 쓰임을 예방하면서 유지보수와 가독성을 높일 수 있습니다.
Intellj의 리팩토링 기능, 자동 메서드분리
intellij에서는 이런 메서드 분리를 위해 자동 메서드분리 기능을 제공합니다.
먼저 메서드분리를 원하는 코드블록 ( {} 로 표현되는 하나의 스택 블록 ) 을 드래그하여 선택합니다.
Ctrl + Alt + M 을 누르면 자동으로 메서드분리가 진행됩니다.
분리된 메서드는 intellij가 원 메서드에 있는 매개변수를 추적해서 넣어주므로,
어떤 매개변수와 타입이 필요한지 선언부에 일일히 적을 필요가 없습니다.
선언부와 매개변수는 직접 수정할 수도 있으나,
엄격하게 하려면 intellij에서 제공하는 “More options” 를 사용하는 것도 좋습니다.
이렇게 접근제한자, 이름, 매개변수를 설정할 수 있습니다.
다만, ReturnType을 여러개로 인식할 수 있는 코드블록이라면 메서드분리 기능을 제공하지 않으니
반환값에 따라 다시 단일 메서드로 분리하면 됩니다.
유지보수와 가독성 향상을 위한 메서드분리를 위해서 Intellij의 자동 메서드분리 기능을 활용해보시기 바랍니다.
참고 자료
intellij IDEA 메서드분리 기능 official Document
Extract method | IntelliJ IDEA
www.jetbrains.com
'정보게시판 > 인텔리제이 기능 리뷰' 카테고리의 다른 글
[Intellij] IDE와 CRLF (개행문자 ) 설정 (0) | 2022.07.21 |
---|---|
Intellij의 Source code hierarchy 기능 소개 (0) | 2022.06.06 |
IntelliJ hot swap (1) | 2022.06.06 |