[ 워밍업 클럽 4기 백엔드 ] - Day 4 미션
5개월 전
1. 코드 리팩토링
✅ [ 변경 전 ]
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;
}✅ [ 변경 후 ]
public boolean validateOrder(Order order) {
if (order.hasNoOrderItems()) {
log.info("주문 항목이 없습니다.");
return false;
}
if (order.isCustomerInfoAbsent()) {
log.info("사용자 정보가 없습니다.");
return false;
}
if (order.isInvalidTotalPrice()) {
log.info("올바르지 않은 총 가격입니다.");
return false;
}
return true;
}🌱 [ 리팩토링 포인트 ]
[ Early Return ]
정보의 기억량을 최소화 하기 위해 Early Return 사용
[ 객체 위임 ]
객체는 스스로 판단 하고 행동 하는 주체
객체와 협력 하기 위해서 getter 사용 하여 값을 추출 하는 것이 아닌 메세지 요청
객체 내부에서 관련된 로직을 수행 하고 외부에는 노출 하지 않으므로 캡슐화
[ 부정 연산자 사용x ]
부정 연산자( ! )는 사고 Depth 상승
부정 연산자를 사용 하지 않고 행위에 부정 의미를 담기
📝 2. SOLID
SRP : 단일 책임 원칙 ( Single Responsibility Principle )
클래스는 단 하나의 책임만 가져야 한다.
ex ) 입출력을 한 객체가 담당할 경우 SRP 위반
OCP : 개방 폐쇄 원칙 ( Open Closed Principle )
확장에 열려 있으며, 수정에는 닫혀 있어야 한다.
public class OrderController(){
private final OrderService orderservice = new OrderServiceImpl();
}
OrderController -> OrderServiceImpl 의존
OrderServiceImpl 구현체 변경시 OrderController 코드를 변경 해야 하므로 OCP 위반 ( DI 필요 )
LSP : 리스코프 치환 원칙 ( Liskov Substitution Principle )
자식 타입은 부모 타입으로 교체될 수 있어야 한다.
ISP : 인터페이스 분리 원칙 ( Interface Segregation Principle )
인터페이스를 사용에 맞게 분리
목적에 맞는 인터페이스 만을 제공
DIP : 의존 역전 원칙 ( Dependency Inversion Principle )
상위 모듈이 하위 모듈에 의존 하는 것이 순방향
상위 모듈 하위 모듈 모두 추상화에 의존 하는 원칙
댓글을 작성해보세요.