워밍업 클럽 4기 - 백엔드 Day 4 미션 및 회고
4개월 전
1.
class Order {
private OrderItems items = new OrderItems();
private Customer customer;
public void validate() {
items.validate();
if(hasNotCustomer) throw new IllegalStateException("사용자 정보가 없습니다.")
}
private boolean hasNotCustomer() {
return !hasCustomer() //기존 코드의 메소드
}
}
class OrderItems {
private List<Item> items;
public void validate() {
if(items.isEmpty()) throw new IllegalStateException("주문 항목이 없습니다.")
if(getTotalPrice() <= 0) throw new IllegalStateException("올바르지 않은 총 가격입니다.")
}
private int getTotalPrice() {
return items.stream().mapToInt(Item::getPrice).sum();
}
}
class Customer {
private String name;
}
public boolean validateOrder(Order order) {
try {
order.validate();
return true;
} catch (IllegalStateException e) {
log.info(e.getMessage());
return false;
}
}
생성자에서 수행할 것 같습니다. 원본 메소드의 boolean 반환형을 유지하기 위해 메소드만 이관했습니다.
로그보다는 예외를 던진후 예외처리단에서 message 로그를 찍는 것이 바람직해보여 예외를 던지도록 변경했습니다.
2. SOLID에 대하여 자기만의 언어로 정리해 봅시다.
단일 책임 원칙은 한 클래스는 두가지 이상의 역할을 수행하지 않는다.
개방폐쇄원칙은 수정엔 닫혀있고 확장엔 열려있어야 한다는 것이다. 구체클래스가 추가되더라도 부모, 추상클래스가 변경되는 일이 없어야한다.
리스코프 치환 원칙은 부모 클래스를 사용하는 로직에서 값만 구체 클래스로 변경해도 로직이 정상수행돼야하는 원칙이다.
인터페이스 분리 원칙은 인터페이스에 과도한 책임이 부여될 경우 각각을 분리해 역할을 명확히 하는 원칙이다.
의존성 역전 원칙은 객체의 필드의 자료형은 추상타입으로 하여 구체클래스를 자유롭게 주입할 수 있게 하는 원칙이다.
댓글을 작성해보세요.