리팩토링 규칙

  1. 데이터의 getter를 사용해서 판단하고 결정하는 로직을 그 데이터로 옮겨라!

image.png

이러한 방법을 객체지향 용어로 표현하면 책임의 이동 이라고 함!

  1. 첫번째 책임 이동시키기 : DiscountCondition

이로 인해서 이제 DiscountCondition 외부에서는 더 이상 discountCondition의 getter를 호출하지 않아도 됨

getter들은 discountCondition 안에서만 사용됨!

image.png

실제로 기간조건도 자기 자신의 상태에 기반해서 스스로 판단하고 의사결정할 수 있음

image.png

  1. 두번째 책임 이동시키기 : DiscountPolicy

ReservationService에 있는 calculateDiscount 메서드의 로직을 DiscountPolicy 데이터에 이동 시키자

image.png

그리고 getter는 삭제하지 않고 public 접근 제한자만 private로 수정해서 외부에서 호출하지 못하도록 감축

image.png