Skip to content

Comments

Chapter 04를 공부하고 소스코드를 추가하라#5

Merged
OikimiO merged 14 commits intomainfrom
chapter-04
Jul 24, 2023
Merged

Chapter 04를 공부하고 소스코드를 추가하라#5
OikimiO merged 14 commits intomainfrom
chapter-04

Conversation

@OikimiO
Copy link
Owner

@OikimiO OikimiO commented Jul 24, 2023

4장을 진행하며 테스트 코드는 진행하지 못했습니다.
추후 테스트 코드는 반드시 추가하도록 하겠습니다!
image

OikimiO added 14 commits July 23, 2023 17:33
- 고정 할인 정책(AMOUNT_DISCOUNT), 비율 할인 정책(PERCENT_DISCOUNT), 미적용(NONE_DISCOUNT)가 있습니다.
- 순번 조건(SEQUENCE), 기간 조건(PERIOD)이 있습니다.
- 영화 타입 구분 세미콜론을 제거했습니다.
- 구현 = 할인조건구분(DiscountConditionType), 순번(int), 주의 일수(DayOfWeek), 시작시간(LocalTime),  종료시간(LocalTime)이 있습니다.
- 변수들에 대한 getter/setter를 만듭니다.
- 구현 = 제목(String), 상영시간(Duration), 관람료(Money), 할인조건들(`List<DiscountCondition>`), 영화 타입(MovieType), 할인 금액(Money), 할인 비율(Money)이 있습니다.
- 공용 = 영화 타입, 관람료, 할인 조건들, 할인 금액, 할인 비율에 대한 getter/setter를 만듭니다.
- 할인 조건들의 경우 리턴하는 List가 수정되지 않게 만들어 주세요
- 구현 = 영화(Movie), 순번(int), 상영 시작시간(LocalDateTime)이 있습니다.
- 변수들에 대한 getter/setter를 만듭니다.
- 구현 = 관람객명(String)과 관람객 id(String)가 있습니다.
- 생성자 = 관람객은 관람객명과 관람객 id를 입력합니다.
- 구현 = 관람객(Customer), 상영(Screening), 관람료(Money), 관람객수(int)가 있습니다.
- 생성자 = 예약에 관람객, 상영, 관람료, 관람객 수를 입력합니다.
- 변수에 대한 getter/setter를 만듭니다.
- 관람객 클래스 명 변경: Audience -> Customer
- 공용 = 관람객 수만큼 상영을 예매하라: Reservation reserve(Screening, Customer, int)
- 구현 = 영화의 할인 조건이 있다면 영화 관람료를 할인받고 예약을 합니다.
- 이 부분을 커밋 기록으로  표현하기엔 어려운 부분이 있어 책을 같이 보며 만들었습니다.
- 각 영화 조건 타입 및 할인 정책의 구분을 if에서 switch로 변경했습니다.
- switch에 람다를 이용하였으며, 리턴받는 값으로는 yield를 사용했습니다.
- 구현 = 왼쪽(int), 위(int), 오른쪽(int), 아래(int)이 있습니다.
- 생성자 = 왼쪽, 위, 오른쪽, 아래를 입력받습니다.
- 변수에 대한 getter/setter를 만듭니다.
- 공용 = 사각형의 오른쪽, 아래에 숫자를 곱하세요: anyMethod(Rectangle, int)
- 어떤 클래스에서 사각형에 접근해 오른쪽과 아래를 곱하는 방식엔 결합도가 높아지는 문제가 발생합니다.
- 그래서 사각형의 오른쪽, 아래에 숫자를 곱하세요를 사각형에서 구현합니다.
	- 곱하는 수만큼 크게 만드세요: enlarge(int)
- 할인 조건 구분 getter를 제외한 나머지 getter/setter를 제거합니다.
- 공용 = 할인 조건 구분을 가져오세요
- 공용 = 기간 조건에 해당하는지 확인하세요: boolean isDiscountable(DayOfWeek, LocalTime)
	- 구현 = 기간 조건이 아닐 경우 Exception 처리하고, 기간 조건이 맞다면 해당 기간이 할인 조건에 맞는지 확인합니다.
- 공용 = 순번 조건에 해당하느지 확인하세요: boolean isDiscountable(int)
	- 구현 = 순번 조건이 아닐 경우 Exception 처리하고, 순번 조건이 맞다면 해당 순번이 할인 조건에 맞는지 확인합니다.
- 예약 대행사(ReservationAgency)의 discountable 조건을 할인 조건
메서드로 구성합니다.
- 공용 = 영화 조건 구분을 가져오세요
- 공용 = 고정 할인 금액 관람료를 계산하세요: Money calculateAmountDiscountedFee()
	- 구현 = 고정 할인 정책이 아닌 경우 exception처리하고, 맞다면 할인된 관람료를 계산하세요
- 공용 = 비율 할인 금액 관람료를 계산하세요: Money calculatePercentDiscountedFee()
	- 구현 = 비율 할인 정책이 아닌 경우 exception처리하고, 맞다면 할인된 관람료를 계산하세요
- 공용 = 할인이 없는 금액 관람료를 계산하세요: Money calculateNoneDiscountedFee()
	- 구현 = 할인이 없는 정책이 아닌 경우 exception처리하고, 맞다면 관람료를 그대로 가져오세요
- 공용 = 이 상영 시간과 순번으로 할인받을 수 있는지 확인하세요: boolean isDiscountable(LocalDateTime, int)
	- 구현 = 할인 조건을 하나씩 비교하여 기간 조건인지 순번 조건인지 확인합니다.
- 예약 대행사(ReservationAgency)의 discountable을 movie의 isDiscountable로 처리하고 이후 관람료를 위의 메서드로 처리합니다.
- 생성자 = 영화, 순번, 상영 시간을 입력받습니다.
- 공용 = 관람객 수만큼 관람료를 계산합니다: Money calculateFee(int)
	- 구현 = 해당 영화의 상영 시간과 순번이 할인 받을 수 있는 조건인지를 확인한 뒤 할인 받을 수 있다면 영화 구분에 따라 영화 관람료를 계산하세요, 기본적으로는 할인 없는 관람료를 리턴받습니다.
- 예약 대행사(ReservationAgency)의 fee를 calculateFee로 입력 받은 뒤 Reservation의 생성자로 입력합니다.
@OikimiO OikimiO changed the title Chapter 04 Chapter 04를 공부하고 소스코드를 추가하라 Jul 24, 2023
@OikimiO OikimiO closed this Jul 24, 2023
@OikimiO OikimiO reopened this Jul 24, 2023
@OikimiO OikimiO merged commit ebc4b61 into main Jul 24, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant