코드 리팩토링(Code Refactoring)

Kkd·2025년 2월 18일

매일메일 개념정리

목록 보기
89/93

1. 코드 리팩토링이란?

코드 리팩토링(Refactoring)은 기능을 변경하지 않으면서 코드의 구조를 개선하는 과정입니다.
즉, 코드의 가독성을 높이고, 유지보수를 쉽게 만들며, 성능을 최적화하는 과정을 의미합니다.

✅ 기능은 그대로 유지하면서 코드 품질을 개선
✅ 가독성, 유지보수성, 확장성 향상
✅ 중복 코드 제거, 불필요한 복잡성 제거

📌 리팩토링의 목적은 "코드를 더 깔끔하고 효율적으로 만들기"


2. 리팩토링이 필요한 이유

✅ 가독성 향상 → 코드를 읽기 쉽게 만들어 유지보수 용이
✅ 유지보수 비용 절감 → 코드 구조를 개선하면 버그 수정 및 기능 추가가 쉬워짐
✅ 코드 중복 제거 → 중복 코드를 최소화하여 코드 길이 감소
✅ 성능 최적화 → 불필요한 연산을 줄이고, 효율적인 코드 작성 가능
✅ 버그 예방 → 코드가 명확해지면 실수로 인한 버그 발생 가능성이 줄어듦

📌 리팩토링을 하지 않으면 코드가 점점 복잡해지고 유지보수가 어려워짐!


3. 코드 리팩토링 방법

✅ 1) 중복 코드 제거

📌 Before (중복 코드가 존재)

public class Discount {
    public double getDiscountedPrice(String type, double price) {
        if (type.equals("STUDENT")) {
            return price * 0.9;
        } else if (type.equals("SENIOR")) {
            return price * 0.85;
        } else {
            return price;
        }
    }
}

📌 After (중복 제거 및 개선)

public class Discount {
    public double getDiscountedPrice(String type, double price) {
        double discountRate = switch (type) {
            case "STUDENT" -> 0.9;
            case "SENIOR" -> 0.85;
            default -> 1.0;
        };
        return price * discountRate;
    }
}

✅ 중복된 return price * 0.XX; 코드 제거하여 유지보수 용이


✅ 2) 의미 있는 변수명 & 함수명 사용

📌 Before (의미 없는 변수명)

public void process(int a, int b) {
    int c = a + b;
    System.out.println(c);
}

📌 After (가독성 향상)

public void printSum(int num1, int num2) {
    int sum = num1 + num2;
    System.out.println(sum);
}

✅ 의미 없는 a, b, c 대신 num1, num2, sum을 사용하여 가독성 향상


✅ 3) 긴 메서드 분리

📌 Before (하나의 긴 메서드)

public class Order {
    public void processOrder() {
        // 사용자 인증
        System.out.println("사용자 인증 완료");

        // 결제 처리
        System.out.println("결제 완료");

        // 주문 정보 저장
        System.out.println("주문 정보 저장");
    }
}

📌 After (단일 책임 원칙 적용)

public class Order {
    public void processOrder() {
        authenticateUser();
        processPayment();
        saveOrder();
    }

    private void authenticateUser() {
        System.out.println("사용자 인증 완료");
    }

    private void processPayment() {
        System.out.println("결제 완료");
    }

    private void saveOrder() {
        System.out.println("주문 정보 저장");
    }
}

✅ 하나의 긴 메서드를 여러 개의 작은 메서드로 분리하여 유지보수 용이


✅ 4) 매직 넘버 제거

📌 Before (매직 넘버 사용)

public double calculateInterest(double amount) {
    return amount * 0.05; // 5% 금리 (하드코딩된 값)
}

📌 After (상수 사용)

public class InterestCalculator {
    private static final double INTEREST_RATE = 0.05;

    public double calculateInterest(double amount) {
        return amount * INTEREST_RATE;
    }
}

✅ 매직 넘버(0.05)를 INTEREST_RATE 상수로 정의하여 가독성 및 유지보수성 향상


✅ 5) 불필요한 if-else 제거 (삼항 연산자 활용)

📌 Before (불필요한 if-else)

public String getStatus(boolean isActive) {
    if (isActive) {
        return "Active";
    } else {
        return "Inactive";
    }
}

📌 After (삼항 연산자 활용)

public String getStatus(boolean isActive) {
    return isActive ? "Active" : "Inactive";
}

✅ 간단한 조건문은 삼항 연산자를 사용하여 가독성 향상


✅ 6) switch 문을 when 문으로 변환 (Kotlin)

📌 Before (Java switch 문)

public String getDay(int day) {
    switch (day) {
        case 1: return "Monday";
        case 2: return "Tuesday";
        case 3: return "Wednesday";
        default: return "Invalid Day";
    }
}

📌 After (Kotlin when 문)

fun getDay(day: Int): String {
    return when (day) {
        1 -> "Monday"
        2 -> "Tuesday"
        3 -> "Wednesday"
        else -> "Invalid Day"
    }
}

✅ 코틀린의 when 문을 사용하여 가독성과 유지보수성 향상


4. 코드 리팩토링 Best Practices

✅ 작은 단위로 리팩토링 진행 → 한 번에 너무 많은 변경 X
✅ 테스트 코드가 존재하는 상태에서 리팩토링 진행 → 기능 유지 보장
✅ 중복 코드 제거 & 가독성 향상 우선
✅ SOLID 원칙 적용하여 객체지향적인 코드 작성
✅ 불필요한 if-else 문을 최소화하고, 삼항 연산자, switch-case 최적화

📌 리팩토링 후에도 기존 기능이 정상적으로 동작하는지 반드시 테스트!


5. 코드 리팩토링과 성능

📌 리팩토링 ≠ 성능 최적화

  • 리팩토링은 코드 가독성 & 유지보수성을 높이는 것
  • 성능이 중요한 경우, 코드 최적화(Optimization)와 병행 가능

📌 예: 성능 최적화를 위한 리팩토링 (Stream API 활용)

// Before (for문 사용)
int sum = 0;
for (int num : numbers) {
    sum += num;
}
// After (Stream API 활용)
int sum = numbers.stream().mapToInt(Integer::intValue).sum();

✅ Stream API를 활용하여 코드 가독성 + 성능 향상


6. 결론

✅ 코드 리팩토링은 "기능은 유지하면서 코드 품질을 개선하는 과정"
✅ 중복 코드 제거, 가독성 향상, 유지보수성 증가 등의 효과가 있음
✅ 작은 단위로 진행하고, 기존 기능이 유지되는지 반드시 테스트해야 함
✅ SOLID 원칙, Clean Code 원칙을 적용하여 효과적인 리팩토링 수행

profile
🌱

0개의 댓글