본문으로 바로가기

리팩토링...java...

category Programing/JAVA 2023. 8. 6. 21:50
반응형

리팩토링은 기존의 코드를 변경하지 않고 코드의 구조를 변경하여 코드의 가독성을 높이고 유지보수를 용이하게 하는 과정입니다. 코드의 기능은 그대로 유지하면서 내부 구조를 개선합니다. 아래에 몇 가지 리팩토링 방법에 대해 자세히 설명하겠습니다.

메소드 추출 (Extract Method): 한 메소드가 너무 많은 일을 하거나 코드의 일부분이 메소드의 목적과 직접적으로 관련이 없는 경우, 이 부분을 별도의 메소드로 추출할 수 있습니다.

전:

void printOwing() {
    printBanner();

    // outstanding 계산
    double outstanding = 0.0;
    for (Order order : orders) {
        outstanding += order.getAmount();
    }

    // 세부사항 출력
    System.out.println("이름: " + name);
    System.out.println("총액: " + outstanding);
}

후:

void printOwing() {
    printBanner();
    double outstanding = calculateOutstanding();
    printDetails(outstanding);
}

double calculateOutstanding() {
    double result = 0.0;
    for (Order order : orders) {
        result += order.getAmount();
    }
    return result;
}

void printDetails(double outstanding) {
    System.out.println("이름: " + name);
    System.out.println("총액: " + outstanding);
}

 

메소드 인라인 (Inline Method): 메소드의 내용이 너무 단순하거나 해당 메소드가 한 번만 호출되는 경우, 메소드를 제거하고 해당 부분을 호출한 코드로 대체합니다.

전:

int getRating() {
    return (moreThanFiveLateDeliveries()) ? 2 : 1;
}

boolean moreThanFiveLateDeliveries() {
    return _numberOfLateDeliveries > 5;
}

후:

int getRating() {
    return (_numberOfLateDeliveries > 5) ? 2 : 1;
}

 

변수명 변경: 변수명은 해당 변수의 용도를 명확하게 보여줘야 합니다. 이해하기 어려운 이름이나 잘못된 정보를 전달하는 이름은 코드의 가독성을 저하시킵니다.

전:

double d; // 경과 시간(일수)

후:

double elapsedTimeInDays;

 

클래스 추출 (Extract Class): 한 클래스가 너무 많은 일을 하거나 클래스의 목적과 직접적으로 관련이 없는 변수나 메소드가 있는 경우, 이들을 별도의 클래스로 분리할 수 있습니다.

전:

class Person {
    String name;
    String officeAreaCode;
    String officeNumber;
}

후:

class Person {
    String name;
    TelephoneNumber telephone;
}

class TelephoneNumber {
    String areaCode;
    String number;
}

 

매직 넘버를 명명된 상수로 변경: 코드에서 직접적으로 사용된 숫자는 의미를 파악하기 어렵고 유지보수가 어렵습니다. 이를 의미있는 명명된 상수로 변경하여 가독성을 높일 수 있습니다.

전:

double potentialEnergy(double mass, double height) {
    return mass * height * 9.81;
}

후:

static final double GRAVITATIONAL_CONSTANT = 9.81;

double potentialEnergy(double mass, double height) {
    return mass * height * GRAVITATIONAL_CONSTANT;
}


주석의 제거: 가급적이면 주석을 쓰지 않는 것이 좋습니다. 코드 자체가 의도를 명확히 보여주어야 합니다. 주석이 필요하다면 코드를 더 명확하게 리팩토링해야 할 필요가 있을 수 있습니다.

전:

// 사전조건: amount는 반드시 양수여야 함
public void addAmount(int amount) {
    if (amount > 0) {
        this.amount += amount;
    }
}

후:

public void addPositiveAmount(int amount) {
    if (amount > 0) {
        this.amount += amount;
    }
}


이들 외에도 많은 리팩토링 기법들이 있습니다. 리팩토링은 단순히 코드를 '더 나은' 상태로 만드는 것이 아니라, 코드의 품질을 유지하면서 소프트웨어의 이해도를 높이는 핵심적인 개발 방법입니다.

반응형