๐ Chapter 8: ์์กด์ฑ ๊ด๋ฆฌํ๊ธฐ
- ํ๋ ฅ์ ํ์์ ์ด์ง๋ง ๊ณผ๋ํ ํ๋ ฅ์ ์ค๊ณ๋ฅผ ๊ณค๊ฒฝ์ ๋น ํธ๋ฆด ์ ์๋ค. ํ๋ ฅ์ ๊ฐ์ฒด๊ฐ ๋ค๋ฅธ ๊ฐ ์ฒด์ ๋ํด ์๊ฒ์ ๊ฐ์ํ๋ค.
- ๋ค๋ฅธ ๊ฐ์ฒด์ ํ๋ ฅํ๊ธฐ ์ํด์๋ ๊ทธ๋ฐ ๊ฐ์ฒด๊ฐ ์กด์ฌํ๋ค๋ ์ฌ์ค์ ์๊ณ ์์ด์ผ ํ๋ค. ๊ฐ์ฒด๊ฐ ์์ ํ ์ ์๋ ๋ฉ์์ง์ ๋ํด์๋ ์๊ณ ์์ด์ผ ํ๋ค. ์ด๋ฐ ์ง์์ด ๊ฐ์ฒด ์ฌ์ด์ ์์กด์ฑ์ ๋ณ๋๋ค.
๐ ์์กด์ฑ ์ดํดํ๊ธฐโ
๐ ๋ณ๊ฒฝ๊ณผ ์์กด์ฑโ
- ์์กด์ฑ์ ์คํ ์์ ๊ณผ ๊ตฌํ ์์ ์ ์๋ก ๋ค๋ฅธ ์๋ฏธ๋ฅผ ๊ฐ์ง๋ค.
- ์คํ ์์ : ์์กดํ๋ ๊ฐ์ฒด๊ฐ ์ ์์ ์ผ๋ก ๋์ํ๊ธฐ ์ํด์๋ ์คํ ์์ ์์กด ๋์ ๊ฐ์ฒด๊ฐ ๋ฐ๋์ ์กด์ฌํด์ผ ํ๋ค.
- ๊ตฌํ ์์ : ์์กด ๋์ ๊ฐ์ฒด๊ฐ ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ ์์กดํ๋ ๊ฐ์ฒด๋ ํจ๊ป ๋ณ๊ฒฝ๋๋ค.
- ๋ค์์
PeriodCondition
ํด๋์ค์isSatisfiedBy
๋ฉ์๋๋Screening
์ธ์คํด์ค์๊ฒgetStartTime
๋ฉ์์ง๋ฅผ ์ ์กํ๋ค.
public class PeriodCondition implements DiscountCondition {
private DayOfWeek dayOfWeek;
private LocalTime startTime;
private LocalTime endTime;
//...
public boolean isSatisfiedBy(Screening screening) {
return screening.getStartTime().getDayOfWeek().equals(dayOfWeek) &&
startTime.compareTo(screening.getStartTime().toLocalTime()) <= 0 &&
endTime.compareTo(screening.getStartTime().toLocalTime()) >= 0;
}
}
- ์คํ ์์ ์
PeriodCondition
์ ์ธ์คํด์ค๊ฐ ์ ์์ ์ผ๋ก ๋์ํ๊ธฐ ์ํด์๋Screening
์ ์ธ์คํด์ค๊ฐ ์กด์ฌํด์ผ ํ๋ค. ๋ง์ฝScreening
์ธ์คํด์ค๊ฐ ์กด์ฌํ์ง ์์ผ๋ฉด ์์ํ๋ ๋๋ก ๋์ํ์ง ์์ ๊ฒ์ด๋ค. - ์ด์ฒ๋ผ ์ด๋ค ๊ฐ์ฒด๊ฐ ์์ ๋ ์์ ์ ์ ์์ ์ผ๋ก ์ํํ๊ธฐ ์ํด ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ํ์๋ก ํ๋ ๊ฒฝ์ฐ ๋ ๊ฐ์ฒด ์ฌ์ด์ ์์กด์ฑ์ด ์กด์ฌํ๋ค๊ณ ๋งํ๋ค. ์์กด์ฑ์ ๋ฐฉํฅ์ฑ์ ๊ฐ์ง๋ฉฐ ํญ์ ๋จ๋ฐฉํฅ์ด๋ค.
- ์ด ๊ฒฝ์ฐ
PeriodCondition
์Screening
์ ์์กดํ๋ค. - ๋ ์์ ์ฌ์ด์ ์์กด์ฑ์ ์์กด๋๋ ์์๊ฐ ๋ณ๊ฒฝ๋ ๋ ์์กดํ๋ ์์๋ ํจ๊ป ๋ณ๊ฒฝ๋ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค. ๋ฐ๋ผ์ ์์กด์ฑ์ ๋ณ๊ฒฝ์ ์ํ ์ํฅ์ ์ ํ ๊ฐ๋ฅ์ฑ์ ์์ํ๋ค.
๐ ์์กด์ฑ ์ ์ดโ
- ์์กด์ฑ์ ์ ์ด๋ ์ ์๋๋ฐ,
Screening
์ ์ฝ๋๋ฅผ ์ดํด๋ณด๋ฉดScreening
์ดMovie
,LocalDateTime
,Customer
์ ์์กดํ๋ค. ์์กด์ฑ ์ ์ด๊ฐ ์๋ฏธํ๋ ๊ฒ์PeriodCondition
์ดScreening
์ ์์กดํ ๊ฒฝ์ฐPeriodCondition
์Screening
์ด ์์กดํ๋ ๋์์ ๋ํด์๋ ์๋์ ์ผ๋ก ์์กดํ๊ฒ ๋๋ค ๊ฒ์ด๋ค. - ์์กด์ฑ์ ํจ๊ป ๋ณ๊ฒฝ๋ ์ ์๋ ๊ฐ๋ฅ์ฑ์ ์๋ฏธํ๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ๊ฒฝ์ฐ์ ์์กด์ฑ์ด ์ ์ด๋๋ ๊ฒ์ ์๋๋ค. ์์กด์ฑ์ด ์ค์ ๋ก ์ ์ด๋ ์ง ์ฌ๋ถ๋ ๋ณ๊ฒฝ์ ๋ฐฉํฅ๊ณผ ์บก์ํ์ ์ ๋์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค. ๋ง๊ฑ
Screening
์ด ์์กดํ๊ณ ์๋ ์ด๋ค ์์์ ๊ตฌํ์ด๋ ์ธํฐํ์ด์ค๊ฐ ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ์ ๋ด๋ถ ๊ตฌํ์ ํจ๊ณผ์ ์ผ๋ก ์บก์ํํ๊ณ ์๋ค๋ฉดScreening
์ ์์กดํ๊ณ ์๋PeriodCondition
๊น์ง๋ ๋ณ๊ฒฝ์ด ์ ํ๋์ง ์์ ๊ฒ์ด๋ค. - ์์กด์ฑ์ ์ ์ด๋ ์ ์๊ธฐ ๋๋ฌธ์ ์์กด์ฑ์ ์ข
๋ฅ๋ฅผ ์ง์ ์์กด์ฑ๊ณผ ๊ฐ์ ์์กด์ฑ์ผ๋ก ๋๋๊ธฐ๋ ํ๋ค. ์ง์ ์์กด์ฑ์ด๋ ํ ์์๊ฐ ๋ค๋ฅธ ์์์ ์ง์ ์์กดํ๋ ๊ฒฝ์ฐ๋ฅผ ๊ฐ๋ฆฌํจ๋ค. (
PeriodCondition
์ดScreening
์ ์์กด, ์ฝ๋์ ๋ช ์์ ์ผ๋ก ๋ค์ด๋๋ค.) ๊ฐ์ ์์กด์ฑ์ด๋ ์ง์ ์ ์ธ ๊ด๊ณ๋ ์กด์ฌํ์ง ์์ง๋ง ์์กด์ฑ ์ ์ด์ ์ํด ์ํฅ์ด ์ ํ๋๋ ๊ฒฝ์ฐ๋ฅผ ๊ฐ๋ฆฌํจ๋ค. (์ฝ๋ ์์ ๋ช ์์ ์ผ๋ก ๋๋ฌ๋์ง ์๋๋ค.)