📜 제목으로 보기

연속된 구간이 아닌 범주별처리 or 범주묶음별 처리도 Rule객체 소유

요일별 요금 계산(DayOfWeekCal)

  • call -> interval -> 특정요일 -> 요일별로 따로 계산
  • call -> interval -> 특정 시간대구간 -> 미리 시간대구간별로 계산법을 쪼개놓은 prev데코객체를 for문을 돌면서 -> 자기구간에 걸리면 처리하도록(연결되어있는 것이 마치 컬렉션)처럼
    • 미리 요일별로 계산법을 쪼개놓은 class -> 객체들(rows)을 만들어놓고, 반복문을 돌면서, 자기 요일이면 계산해서 반환하도록 한다.
    • 이 때, 단일 필드 1개 요일 하나하나 쪼개놔도 되지만, Set<요일> = 을 통해, 미리 쪼개놓기을 주중/주말로 짤라놔도 된다.

이미 정해져있는 범주별로 계산해줄 Rule객체를 만들고, 계산클래스는 Rule컬렉션(Set) 1개만 필드로 보유한다. Rule들은 자신이 처리할 대상이 맞는지 확인해야한다.

  • 이미 정해져있는 구간 / 범주별 처리는 개별처리해줄 rule객체 컬렉션or prev데코객체를 두고, 반복문을 통해 돌리고, 해당하는 처리들이, 자기몫만 계산하고 반환하게 한다. 이 때, 해당하지 않는 놈들도 있으니 ZERO반환하면서 누적되는 계산법이 필수다

    • 필드로 연결되는 데코객체라면 -> 단일 객체필드 1개만 소유한다.
    • 범주별 개별 처리하는 객체라면 -> 모든 범주별처리 객체를 Set필드에 모아서 이것을 소유한다.
      • 동적으로 변하는 것이 아니기 때문에 final필드 + 생성자 주입으로 Set필드를 초기화한다.
    • 미리 모든 경우의수를 다 쪼개놨기 때문에, 반복문을 돌며, 각Rule자신은 자신의 처리대상이 맞는지 확인기능도 포함되어야한다.
  1. Calc계산기와 이미 정해져있는 범주들을 처리해줄 모든 경우의수 rules 필드를 만든다.

    f6a2b26c-a8ff-44e2-a4d9-9ca85a35b6a8

    image-20220721012129583

  2. 기존 Calculator를 구현해서, 계산기능을 넣는다.

    image-20220721012305914

Rule객체의 class는 자신의 처리구간(요일) + 처리시 필요정보(단위시간과, 단위시간당 부과할 요금)를 필드로 가진다

798b43a1-2484-4adc-846f-d55b405fe2f5

image-20220721012714610

Rule객체는 처리할 대상이 범주1개가 아니라 범주묶음이라면, Set컬렉션필드를 가지면 된다. 자신이 처리할 대상이 1개의 범주라서 contains로 확인하면 된다.

aff90b0a-9b61-4fbb-92a9-8660bf0af7a5

image-20220721014926126

Rule들을 소유한 Calc는 처리대상을 만들어주고, rule를 반복문 돌리되, 개별계산은 해당없을시 ZERO반환하여 바깥에서 누적계산이 되도록 한다.

image-20220721020647515

image-20220721031303713

주의) 시간 구간처리시, 23, 59, 59의 가능성이 있다면, +1초 예외처리를 해줘야한다.

image-20220721031239280

rule 테스트

image-20220721023122666

calc 테스트

image-20220721031324763