[인프런 워밍업 클럽 3기 BE 클린코드 & 테스트] Day 4 미션 제출
9개월 전
리팩토링
섹션3까지의 내용을 중심으로 리팩토링하였습니다. (처음에 섹션 4까지의 내용을 모두 적용하여 리팩토링 하는 것으로 파악하였는데, 아니어서 문구 수정하여 그대로 제출합니다. )
public class OrderValidator {
private static final String NO_ITEMS_ERROR = "주문 항목이 없습니다."; // 에러 메시지를 상수로 정의해 가독성 향상
private static final String INVALID_TOTAL_PRICE_ERROR = "올바르지 않은 총 가격입니다.";
private static final String NO_CUSTOMER_INFO_ERROR = "사용자 정보가 없습니다.";
public boolean validateOrder(Order order) {
if (hasNoItems(order)) {
log.info(NO_ITEMS_ERROR);
return false; // early return 적용
}
if (isTotalPriceInvalid(order)) {
log.info(INVALID_TOTAL_PRICE_ERROR);
return false;
}
if (hasNoCustomerInfo(order)) {
log.info(NO_CUSTOMER_INFO_ERROR);
return false;
}
return true;
}
private boolean hasNoItems(Order order) { // 한 메서드가 하나의 기능만 수행하도록 함(단일책임원칙)
return order.getItems().isEmpty();
}
private boolean isTotalPriceInvalid(Order order) {
return order.getTotalPrice() <= 0; // 부정 연산자 제거
}
private boolean hasNoCustomerInfo(Order order) {
return !order.hasCustomerInfo();
}
}SOLID 원칙을 자신의 언어로 정리하기
SOLID 원칙: 객체 지향 설계에서 코드의 유지보수성과 확장성을 높이기 위한 소프트웨어 개발 원칙
단일 책임 원칙 (SRP): 클래스 레벨에서 많이 이야기하며, 하나의 클래스가 하나의 책임만 가져야 함.
그 책임이 변경될 이유도 하나여야 함. 변경 이유가 곧 책임
확장-폐쇄 원칙 (OCP): 확장에는 열려 있고, 수정에는 닫혀 있어야 함.
기존 코드 변경 없이 기능 확장이 가능해야 함. 추상화와 다형성을 활용해 지킬 수 있음
리스코프 치환 원칙 (LSP): 부모 클래스와 자식 클래스가 있을 때, 부모가 있는 곳에 자식 클래스의 인스턴스로 대체해도 정상 동작하여야 함.
자식 클래스는 부모 클래스의 역할을 완전히 대체할 수 있어야 함
인터페이스 분리의 원칙 (ISP): 인터페이스는 기능 단위로 잘게 쪼개야 함.
복잡한 인터페이스는 분리 필요
의존성 역전의 원칙 (DIP): 고수준 모듈은 저수준 모듈(구체적 객체)에 의존하지 않음
고수준 모듈과 저수준 모듈 모두 추상화에 의존해야 함.(저수준 모델이 바뀌어도 고수준 모델이 타격받지 않음)
댓글을 작성해보세요.