기존 코드를 개선하여 읽기 쉽고 유지보수하기 쉽게 만드는 과정
리팩토링을 통해 코드의 구조를 변경하되, 외부 동작은 그대로 유지하는 것이 목표.
이를 통해 코드의 품질을 높이고 버그를 줄이며, 새로운 기능을 추가 하기 쉬운 기반을 만들 수 있음
public void printOwing(double amount) {
// 기존 코드
printBanner();
// 세부 사항 추출
printDetails(amount);
}
private void printDetails(double amount) {
System.out.println("총 금액은 " + amount + "입니다.");
}
double basePrice = quantity * itemPrice;
double discount = (basePrice > 1000) ? basePrice * 0.1 : 0;
double finalPrice = basePrice - discount;
if (isDiscountable()) {
applyDiscount();
}
public class Order {
private Customer customer;
private List<Item> items;
public void addItem(Item item) { ... }
public double getTotal() { ... }
}
public class Customer {
private String name;
private String address;
// 인라인
}
public interface Shape {
void draw();
double area();
}
public interface Drawable {
void draw();
}
public class Money {
private final BigDecimal amount;
private final Currency currency;
public Money(BigDecimal amount, Currency currency) {
// Getter 및 메서드
}
}
기존 코드
public class OrderProcessor {
public void processOrder(Order order) {
double total = 0;
for (Item item : order.getItems()) {
total += item.getPrice();
}
if (total > 1000) {
total *= 0.9;
}
}
}
리팩토링 후
public class OrderProcessor {
public void processOrder(Order order) {
double total = calculateTotal(order);
double discountedTotal = applyDiscountIfNeeded(total);
}
private double calculateTotal(Order order) {
return order.getItems().stream()
.mapToDouble(Item::getPrice)
.sum();
}
private double applyDiscountIfNeeded(double total) {
return (total > 1000) ? total * 0.9 : total;
}
}