워밍업 클럽 4기 - 백엔드 Day 4 미션
4개월 전
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 (isEmptyOrder(order)) {
log.info("주문 항목이 없습니다");
return false;
}
if (!hasValidTotalPrice(order)) {
log.info("올바르지 않은 총 가격입니다");
return false;
}
if (!hasCustomerInfo(order)) {
log.info("사용자 정보가 없습니다.");
return false;
}
return true;
}
Early return
- 각 조건 실패시 조기 반환을 통해서 깊은 중첩을 제거
공백라인을 대하는 자세
- 각 조건별 블록별로 공백줄을 넣어서 논리 단위 분리
부정어를 대하는 자세
- !isEmptyOrder 대신에 isEmptyOrder로 대신하여 구현하여 가독성이 더 좋게 변경
2. SOLID 원칙
1. SRP
- 하나의 클래스는 단 한가지의 변경 이유만을 가져야한다
- 단 하나의 기능만을 담당하게되어 응집도를 높이고 변화에 유연하게 대처할 수 있다
2. OCP
- 확장에는 열려있고 수정에는 닫혀있어야 한다
- 기존 코드는 건드리지 않고 기능을 확장할수 있게 해준다
3. LSP
- 상속구조에서 부모클래스의 인스턴스를 자식 클래스이 인스턴스로 치환할수 있어야 한다
- 상속 구조에서 자식 클래스가 부모의 행위를 깨뜨리지 않도록 설계
4. ISP
- 클라이언트는 자신이 사용하지 않는 인터페이스에 의존하면 안된다
- 인터페이스를 작게 나눠 불필요한 구현을 피하고 불필요한 의존성을 제거한다
5. DIP
- 상위 수준의 모듈은 하위 수준의 모듈에 의존해서는 안된다
- 구체적인 구현이 아닌 추상에 의존하게 하여 결합도를 낮추고 유연성과 테스트 용이성을 향상 시킨다
댓글을 작성해보세요.