Java:
리팩터링

방법:

조직이나 명확성이 떨어져 리팩터링이 필요한 간단한 Java 클래스를 살펴봅시다.

public class Calculator {
    public int calc(int op1, int op2, String operation) {
        if (operation.equals("add")) {
            return op1 + op2;
        } else if (operation.equals("subtract")) {
            return op1 - op2;
        } // 기타 연산들...
    }
}

리팩터링 후에는 다음과 같습니다:

public class Calculator {
    public int add(int operand1, int operand2) {
        return operand1 + operand2;
    }

    public int subtract(int operand1, int operand2) {
        return operand1 - operand2;
    }

    // 기타 연산들...
}

리팩터링을 통해 메서드 이름과 매개변수를 가독성 좋게 개선했고, 단일 메서드 내에서 조건 분기의 필요성을 제거했습니다. 각 연산은 이제 그 목적을 명확하게 설명합니다.

심층 탐구:

리팩터링은 코드 가독성과 객체 지향 설계에 중점을 둔 Smalltalk 커뮤니티에서 그 뿌리를 찾을 수 있지만, Martin Fowler의 주옥같은 책 “Refactoring: Improving the Design of Existing Code"의 출판 이후, 특히 90년대 말과 00년대 초반 Java 세계에서 정말로 주목받기 시작했습니다.

리팩터링의 대안으로는 코드를 처음부터 다시 작성하는 것이 있지만, 기능성을 방해하지 않는 점진적 변경을 포함한다는 점에서 리팩터링이 종종 선호됩니다.

Java(또는 모든 프로그래밍 언어)에서 리팩터링을 구현할 때의 세부 사항은 코드 냄새—코드에서 더 심각한 문제를 지시하는 지표—를 이해하는 데 중심을 둡니다. 긴 메서드, 큰 클래스, 중복 코드, 과도한 원시 사용과 같은 냄새가 있습니다. Extract Method, Move Method 또는 Replace Temp with Query와 같은 리팩터링 패턴을 적용함으로써 개발자는 이러한 냄새를 체계적으로 다루면서 언제나 코드가 기능적으로 유지되도록 할 수 있습니다.

IntelliJ IDEA의 리팩터링 지원이나 Eclipse용 플러그인 같은 자동화 도구는 변수, 메서드 및 클래스의 이름 변경, 메서드 또는 변수의 추출, 그리고 메서드 또는 클래스를 다른 패키지나 네임스페이스로 이동하는 것과 같은 리팩터링을 자동화하는 데 도움을 줄 수 있습니다.

참고 자료:

이러한 각 자료들은 리팩터링의 원칙을 이해하거나 이 원칙들을 실제로 적용하는 데 활용될 수 있는 도구를 제공합니다.