먼저 불필요한 if문을 제거해본다.
if
할인율은 결국 회원 등급별로 판단되기 때문에 회원 등급 클래스가 할인율을 가지고 관리하도록 변경해본다.
ClassGrade에 할인율 필드와 조회 메서드를 추가한다.
ClassGrade
생성자를 통해서만 할인율을 설정하도록 하고, 불변으로 설계했다.
즉, 상수를 정의할 때 등급에 따른 할인율이 정해진다.
이제 if 문을 사용할 필요 없이 단순히 회원 등급 안에 있는 할인율을 바로 구할 수 있다.
할인율 필드를 추가하고, 생성자를 통해서 필드에 값을 저장한다.
열거형은 상수로 지정하는 것 외에 일반적인 방법으로 생성이 불가능하기 때문에 생성자에 접근제어자를 선언할 수 없게 막혀있다.
열거형도 클래스이므로 메서드를 추가할 수 있다.
위 코드에서 이제는 단순히 할인율을 계산하는 로직만 남게 되었다.
이 코드를 보면 할인율 계산을 위해 Grade의 할인율 값을 꺼내서 사용한다.
Grade
객체지향 관점에서 이렇게 자신의 데이터를 외부에 노출하는 것보다는, Grade 클래스가 자신의 할인율을 어떻게 계산하는지 스스로 관리하는 것이 캡슐화 원칙에 더 맞다.
할인율 계산은 Grade 가 스스로 처리할 수 있으므로 서비스 로직 에서는 단순히 메서드를 호출하기만 하면 된다.
각각의 등급별로 자신의 discount()를 호출하면 할인율을 구할 수 있기 때문에 이제 굳이 필요없는 DiscountService를 사용하지 않아도 된다.
discount()
DiscountService
메서드로 추출
이전 ↩️ - 자바(ENUM) - Enum Typearrow-up-right
메인 ⏫arrow-up-right
Last updated 3 months ago