[워밍업 클럽 4기] 백엔드 Day 4. 객체 지향과 SOLID

🎯 읽기 좋은 코드 (refactor)

as-is

public boolean validateOrder(Order order) {
    if (order.getItems().size() == 0) {
        log.info("주문 항목이 없습니다.");
        return false;
    } else {
        if (order.getTotalPrice() > 0) {
            if (!order.hasCustomerInfo()) {
                log.info("사용자 정보가 없습니다.");
                return false;
            } else {
                return true;
            }
        } else if (!(order.getTotalPrice() > 0)) {
            log.info("올바르지 않은 총 가격입니다.");
            return false;
        }
    }
    return true;
}

to-be

public class OrderException extends RuntimeException {
    public OrderException(String message) {
        super(message);
    }
}

public boolean validateOrder(Order order) {
    if (order.hasNoItems()) {
        throw new OrderException("주문 항목이 없습니다.");
    }
    
    if (order.hasInvalidTotalPrice()) {
        throw new OrderException("올바르지 않은 총 가격입니다.");
    }

    if (order.isMissingCustomerInfo()) {
        throw new OrderException("사용자 정보가 없습니다.");
    }

    return true;
}

📌 SOLID란 (SRP, OCP, LSP, ISP, DIP)

  • 어떤 객체에 대해 의존적인 기능들이 변경 된다 하더라도 다른 부분에 있어 영향력을 최소화 하는 것이 책임적으로 바람직할 것이다. 클래스로 태어난 인생, 뚝심 있게 한 우물 파도록 하자.

  • 새로운 기능이 생성될 때, 기존의 기능에 영향을 주지 않고 새로운 기능만 온전히 추가되도록 해야 한다. 각 기능에 의리 있는 객체가 되도록 하자.

  • 자식 클래스가 부모 클래스의 기능을 대체할 수 있어야 한다. 부모님의 면을 세워드리자.

  • 인터페이스는 잘게 쪼개어 의존적이지 않게 구현해야 한다. 여러 곳에 발 걸치지 말고 명료하고 구체적으로.

  • 어떤 구체 간의 관계에서 의존적인 관계는 바람직하지 않기에 추상한 것을 의존하도록 추구하자.

댓글을 작성해보세요.

채널톡 아이콘