인프런 워밍업 클럽 2기(클린코드/테스트 코드)_day4 미션
1. 아래 코드와 설명을 보고, [섹션 3. 논리, 사고의 흐름]에서 이야기하는 내용을 중심으로 읽기 좋은 코드로 리팩토링해 봅시다.
✔ 사용자가 생성한 '주문'이 유효한지를 검증하는 메서드.
✔ Order는 주문 객체이고, 필요하다면 Order에 추가적인 메서드를 만들어도 된다. (Order 내부의 구현을 구체적으로 할 필요는 없다.)
✔ 필요하다면 메서드를 추출할 수 있다.
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.getItems().isEmpty()) {
log.info("주문 항목이 없습니다.");
return false;
}
if (order.getTotalPrice() > 0) {
if (order.hasCustomerInfo()) {
return true;
}
log.info("사용자 정보가 없습니다.");
return false;
}
if (order.getTotalPrice() <= 0) {
log.info("올바르지 않은 총 가격입니다.");
return false;
}
return true;
}
}
!(부정 연산자) 줄이기
dept 줄이기
공백 라인 추가
2. SOLID에 대하여 자기만의 언어로 정리해 봅시다.
단일 책임 원칙
하나의 클래스는 하나의 책임만 가져야 한다.
하나의 역할에 집중하면 코드를 수정할 때 다른 부분에 영향을 주지 않고 유지보수가 쉬워진다.
개방 - 폐쇄 원칙
확장에는 열려 있고 수정에는 닫혀있어야 한다.
기존의 코드를 변경하지 않고 새로운 기능을 추가할 수 있어야 한다.
이미 작동하는 코드가 손상될 위험이 줄어들고 확장도 수월하다.
리스코프 치환 원칙
부모 클래스 대신 자식 클래스를 사용해도 문제가 없어야 한다.
자식 클래스가 부모 클래스의 기능을 대신할 수 있다면 코드의 안정성을 높일 수 있다.
인터페이스 분리 법칙
인터페이스는 필요한 기능만을 나누어 제공해야 한다.
큰 인터페이스보다는 작은 인터페이스 여러 개로 설계해야 한다.
불필요한 의존성을 줄이고 코드의 유연성을 높일 수 있다.
의존 역전 법칙
고수준 모듈은 저수준 모듈에 의존하지 않아야 한다.
추상화된 인터페이스에 의존해야 한다.
변화에 강한 구조를 만들고 코드의 재사용성을 높일 수 있다.
댓글을 작성해보세요.