[워밍업 클럽 4기] 백엔드 Day 4. 객체 지향과 SOLID
15일 전
🎯 읽기 좋은 코드 (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)
어떤 객체에 대해 의존적인 기능들이 변경 된다 하더라도 다른 부분에 있어 영향력을 최소화 하는 것이 책임적으로 바람직할 것이다. 클래스로 태어난 인생, 뚝심 있게 한 우물 파도록 하자.
새로운 기능이 생성될 때, 기존의 기능에 영향을 주지 않고 새로운 기능만 온전히 추가되도록 해야 한다. 각 기능에 의리 있는 객체가 되도록 하자.
자식 클래스가 부모 클래스의 기능을 대체할 수 있어야 한다. 부모님의 면을 세워드리자.
인터페이스는 잘게 쪼개어 의존적이지 않게 구현해야 한다. 여러 곳에 발 걸치지 말고 명료하고 구체적으로.
어떤 구체 간의 관계에서 의존적인 관계는 바람직하지 않기에 추상한 것을 의존하도록 추구하자.
댓글을 작성해보세요.