워밍업 클럽 3기 BE 클린코드 - Day 4 미션

워밍업 클럽 3기 BE 클린코드 - Day 4 미션

코드 리팩토링

public boolean validateOrder(Order order) {
    try {
	checkOrderContainsItems(order);
	checkOrderHaveValidPrice(order);
	checkOrderContainCustomerInfo(order);
	    
	return true;
    } catch(OrderException e) {
	log.error(e.getMessage());
			
	return false;
    }
}

private void checkOrderContainsItems(Order order) {
    if (order.containsNoItems()) {
        throw new OrderException("주문 항목이 없습니다.");
    } 
}

private void checkOrderContainCustomerInfo(Order order) {
    if (order.doesNotContainCustomerInfo()) {
        throw new OrderException("사용자 정보가 없습니다.");
    } 
}

private void checkOrderHaveValidPrice(Order order) {
    if (order.priceIsInvalid()) {
        throw new OrderException("올바르지 않은 총 가격입니다.");
    }
}

SOLID

단일책임 원칙

  • 객체는 하나의 책임만 담당해야 하며, 이를 달성하는 데만 집중해야 한다.

  • 여러 책임이 하나의 객체에 있을 경우 유지보수 시 책임간의 충돌이 일어날 수 있다.

  • 책임간의 충돌은 신뢰할 수 없는 기능, 더 나아가 불완전한 프로그램이 될 수 있다.

  • 즉 책임이 하나라는 것은 객체를 변경해야 하는 이유는 단 하나여야 한다는 것이다.

개방/폐쇄 원칙

  • 확장에는 열려있고, 변경에는 닫혀있다는 것은 새로운 요구사항이 기존 코드에 대한 변경은 최소화 하고, 새로운 구현으로 확장해나간다는 것이다.

리스코프 치환 원칙

  • 기본 객체의 기능을 파생 객체가 대체할 수 있어야 한다.

  • 이를 달성하기 위해서는 해당 객체의 의도를 파악하여야 한다.

  • 이러한 의도를 가장 명확하게 파악하고, 전달하는 방법은 테스트 코드

인스턴스 분리 원칙

  • 클라이언트가 자신이 사용하지 않는 기능에 의존하지 말아야 한다.

  • 즉 자신이 사용하지 않는 기능을 구현해야 한다면 해당 인터페이스는 이 원칙을 어긴 것이다.

  • 이러한 원칙은 코드의 응집도를 높일 수 있으며, 코드의 재사용성도 높아진다.

의존성 역전 원칙

  • 상위 모듈은 하위 모듈에 의존해서는 안되며, 상위 모듈과 하위 모듈은 모두 추상화에 의존해야 한다.

  • 상위 모듈은 추상화에 의존해야 하며, 하위 모듈은 추상화를 구현해야 한다.

  • 이러한 원칙을 통해 응집도를 높이고, 변경의 전파를 최소화할 수 있다.

 

결과적으로 SOLID 원칙을 지킨다는 것은 신뢰할 수 있는 프로그래밍을 위한 도구를 사용한다는 것으로 보인다.

이를 통해 협업에서 신뢰할 수 있는 분업이 가능해지고, 결과적으로 안정적인 프로그램을 구축할 수 있다고 생각된다.


참고: 자바/스프링 개발자를 위한 실용주의 프로그래밍, 김우근 - 위키북스

댓글을 작성해보세요.

채널톡 아이콘