- SOLID 에 대해여 자기만의 언어로 정리하기
- 코드 리팩토링
로버트 마틴이 제시한 객체 지향 프로그래밍 설계의 다섯 가지 기본 원칙
SRP: Single Responsibility Principle
단일 책임 원칙
OCP: Open-Closed Principle
개방-폐쇄 원칙
LSP: Liskov Substitution Principle
리스코프 치환 원칙
ISP: Interface Segregation Principle
인터페이스 분리 원칙
DIP: Dependency Inversion Principle
의존관계 역전 원칙
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;
}
리팩토링 주안점
// As-Is
if (!order.hasCustomerInfo()) { ··· }
else if (!(order.getTotalPrice() > 0)) { ··· }
// To-Be
if (order.hasNotCustomerInfo()) { ··· }
else if (order.getTotalPrice() <= 0)) { ··· }
// As-Is
if (order.getItems().size() == 0) {
···
} else {
if (order.getTotalPrice() > 0) {
···
if (!order.hasCustomerInfo()) {
···
} else {
···
}
} else if (order.getTotalPrice() <= 0)) {
···
}
}
// To-Be
if (order.getItems().size() == 0) {
···
return false;
}
if (order.getTotalPrice() <= 0)) {
···
return false;
}
if (order.hasNotCustomerInfo()) {
···
return false;
}
return true;
if (order == null) {
log.info("주문 객체가 null입니다.");
return false;
}
// As-Is
order.getItems().size()
// To-Be
order.getTotalSize()
리팩토링 결과
public boolean validateOrder(Order order) {
if (order == null) {
log.info("주문 객체가 null입니다.");
return false;
}
if (order.getTotalSize() == 0) {
log.info("주문 항목이 없습니다.");
return false;
}
if (order.getTotalPrice() < 0)) {
log.info("올바르지 않은 총 가격입니다.");
return false;
}
if (order.hasNotCustomerInfo()) {
log.info("사용자 정보가 없습니다.");
return false;
}
return true;
}
출처
(Inflearn) Readable Code: 읽기 좋은 코드를 작성하는 사고법 - 박우빈