๊ฐ์ฒด์งํฅ์ ํน์ง๊ณผ ๊ฐ๋ ์ ์๋ ๊ฒ๊ณผ ๊ฐ์ฒด์งํฅ์ ์ธ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ ๋ ๋ฆฝ๋ณ์๋ผ๋ ์ฌ์ค์ ์์ฆ์ ๋ ๋ง์ด ๋๋ผ๊ฒ ๋๋ค. ๋งค๋ฒ ์ข์ ์ํคํ ์ณ์ ๊ฐ๋ ์ฑ๊ณผ ํ์ฅ์ฑ ๋ฑ๋ฑ ์์ฐ์ฑ์ด ์ข์ ๊ฐ์ฒด์งํฅ์ ์ฝ๋(..)๋ฅผ ๋๋ฌด๋๋ ์์ฑํ๊ณ ์ถ์ง๋ง, ์ฝ๋๋ฅผ ์์ฑํ๊ณ ๋๋ฉด ๋จ๋ ๊ฒ์ ์๊ดด๊ฐ๊ณผ ๊ฐ์ฒด์งํฅ์ ํ๋ด๋ง ๋ธ ๋ฐ๋ณด๊ฐ์ ์ฝ๋๋ค ๋ฟ์ด์๋ค. ๋น์ฐํ ์ด ์ฑ ์ ์ฝ๋๋ค๊ณ ํด์ ํ๋ฃจ์์นจ์ ์๋ฒฝํ ๊ฐ์ฒด์งํฅ์ ์ธ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๊ฒ ์ง๋ง.. ์กฐ๊ธ์ด๋ผ๋ ๋์์ด ๋๋ค๋ฉด ๋ช ๋ฒ์ด๊ณ ๋ค์ ์ฝ์ ์ํฅ์ด ์๋ค.
๋ค์๊ณผ ๊ฐ์ ์๊ตฌ์ฌํญ์ ๊ฐ์ง ํฐ์ผํ๋งค ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌํํ๋ค๊ณ ๊ฐ์ ํ์.
๊ทธ๋ฆฌ๊ณ ์๊ทน์ฅ์ ๊ตฌํํ๋ ํด๋์ค Theater
๋ ๋ค์๊ณผ ๊ฐ์๋ฐ, ์ด ํด๋์ค๋ ๊ด๋๊ฐ์ ๋ง์ดํ๋ ์ผ์ ์ํํ๋ค.
public class Theater {
private TicketSeller ticketSeller;
public Theater(TicketSeller ticketSeller) {
this.ticketSeller = ticketSeller;
}
public void enter(Audience audience) {
if (audience.getBag().hasInvitation()) {
Ticket ticket = ticketSeller.getTicketOffice().getTicket();
audience.getBag().setTicket(ticket);
} else {
Ticket ticket = ticketSeller.getTicketOffice().getTicket();
audience.getBag().minusAmount(ticket.getFee());
ticketSeller.getTicketOffice().plusAmount(ticket.getFee());
audience.getBag().setTicket(ticket);
}
}
}
๋ก๋ฒํธ ๋งํด์ ํด๋ฆฐ ์ํํธ์จ์ด์ ๋ฐ๋ฅด๋ฉด, ์ํํธ์จ์ด ๋ชจ๋์ด ๊ฐ์ ธ์ผํ๋ ์ธ ๊ฐ์ง ๊ธฐ๋ฅ์ ๋ํด ์ค๋ช ํ๋ค. ์์ฝํ์๋ฉด ์ ๋๋ก ์คํ๋์ด์ผ ํ๊ณ , ๋ณ๊ฒฝ์ด ์ฉ์ดํด์ผํ๋ฉฐ, ์ดํดํ๊ธฐ ์ฌ์์ผ ํ๋ค. ์์ ๊ฐ์ ํ๋ก๊ทธ๋จ์ ์ ๋๋ก ์คํ์ด ๋๋ค๋ ์ ์์ ์ฒซ ๋ฒ์งธ ์กฐ๊ฑด์ ๋ง์กฑํ์ง๋ง, ๋ณ๊ฒฝ์ด ์ฉ์ดํ์ง ์๊ณ ์ดํด๊ฐ ์ด๋ ต๋ค๋ ๋ฌธ์ ์ ์ด ์๋ค.
๊ทธ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ๋ค.
Theate์ enter๊ฐ ์ํํ๋ ์ผ์ ๋ง๋ก ํ์์ ๋, ๋ค์๊ณผ ๊ฐ๋ค.
์๊ทน์ฅ
์ด๊ด๋๊ฐ
์ ๊ฐ๋ฐฉ์ ์ด์ด ์ด๋์ฅ์ด ๋ค์ด์๋์ง ์ดํ๋ค. ๊ฐ๋ฐฉ ์์ ์ด๋์ฅ์ด ์์ผ๋ฉดํ๋งค์
์ ๋งคํ์์ ๋ณด๊ด๋ ํฐ์ผ์ ๊ด๋๊ฐ์ ๊ฐ๋ฐฉ์ ์ฎ๊ธด๋ค. ๊ฐ๋ฐฉ ์์ ์ด๋์ฅ์ด ์์ผ๋ฉด๊ด๋๊ฐ
์ ๊ฐ๋ฐฉ์์ ํฐ์ผ ๊ธ์ก๋งํผ ํ๊ธ์ ๊บผ๋ด ๋งคํ์์ ์ ๋ฆฝํ ํ ๋ณด๊ด๋ ํฐ์ผ์ ๊ด๋๊ฐ์ ๊ฐ๋ฐฉ์ผ๋ก ์ฎ๊ธด๋ค.
๊ด๋๊ฐ๊ณผ ํ๋งค์์ ์๊ทน์ฅ์ ํต์ ๋ฅผ ๋ฐ๋ ์๋์ ์ธ ์กด์ฌ์ธ ๊ฒ์ด๋ค.
๊ด๋๊ฐ์ ์ ์ฅ์์, ์๊ทน์ฅ์ด๋ผ๋ ์ 3์๊ฐ ๋ฉ๋๋ก ์ด๋์ฅ์ด ์๋์ง๋ฅผ ํ์ธํ๊ธฐ ์ํด ๊ฐ๋ฐฉ์ ๋ง๋๋ก ์ด์ด๋ณด๋ ๊ฒ์ด๋ค.
ํ๋งค์ ์ญ์ ๋ง์ฐฌ๊ฐ์ง์ธ๋ฐ, ์๊ทน์ฅ์ด ํ๋ฝ๋ ์์ด ๋งคํ์์ ๋ณด๊ด๋ด ํฐ์ผ๊ณผ ํ๊ธ์ ๋ง์๋๋ก ์ ๊ทผํ๊ธฐ ๋๋ฌธ์ด๋ค. ํฐ์ผ์ ๊บผ๋ด ๊ด๋๊ฐ์ ๊ฐ๋ฐฉ์ ์ง์ด๋ฃ๊ณ ๊ด๋๊ฐ์์ ๋ฐ์ ๋์ ๋งคํ์์ ์ ๋ฆฝํ๋ ํ์ ์ญ์ ์๊ทน์ฅ์ด ์ํํ๋ฏ๋ก ๋ ํฐ ๋ฌธ์ ์ด๋ค.
๋ํ Theater
์ enter
๋ฉ์๋๋ฅผ ์ดํด๋ณด๋ฉด, Audience๊ฐ Bag์ ๊ฐ์ง๊ณ ์๊ณ , Bag์๋ ํ๊ธ๊ณผ ํฐ์ผ์ด ๋ค์ด์์ผ๋ฉฐ, TicketSeller๊ฐ TicketOffice์์ ํฐ์ผ์ ํ๋งคํ๊ณ , TicketOffice ์์ ๋๊ณผ ํฐ์ผ์ด ๋ณด๊ด๋ ์ฌ์ค์ ์๊ณ ์์ด์ผ ํ๋ค.
๋ฌธ์ ์ ์ ์์ฝํ์๋ฉด, 1) ํ๋์ ํด๋์ค๋ ๋ฉ์๋๊ฐ ๋๋ฌด ๋ง์ ์ธ๋ถ์ฌํญ์ ๋ค๋ฃจ์ด ์ฝ๋ ์์ฑ์์ ์ฝ๋ ์ฌ๋ ๋ชจ๋์๊ฒ ๋ถ๋ด์ ์ฃผ๊ณ 2) Audience์ TicketSeller๋ฅผ ๋ณ๊ฒฝํ ๊ฒฝ์ฐ Theater ์ญ์ ํจ๊ป ๋ณ๊ฒฝ๋๋ค๋ ํฐ ๋ฌธ์ ๊ฐ ์๋ค.
์์กด์ฑ์ ๋ณ๊ฒฝ๊ณผ ๊ด๋ จ๋์ด ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ฌ์ง๊ฐ ๋๋ค. ์์กด์ฑ์ ๋ณ๊ฒฝ์ ๋ํ ์ํฅ์ ์์ํ๋๋ฐ, ์ด๋ฆ ์์ฒด์ ์ด๋ค ๊ฐ์ฒด๊ฐ ๋ณ๊ฒฝ๋ ๋ ๊ทธ ๊ฐ์ฒด์ ์์กดํ๋ ๋ค๋ฅธ ๊ฐ์ฒด๋ ํจ๊ป ๋ณ๊ฒฝ๋ ์ ์๋ค๋ ์ฌ์ค์ด ๋ดํฌ๋์ด์๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ ๊ธฐ๋ฅ์ ๊ตฌํํ ๋ ์ต์ํ์ ์์กด์ฑ๋ง ์ ์งํ๊ณ , ๋ถํ์ํ ์์กด์ฑ์ ์ ๊ฑฐํด์ผํ๋ค. ์ฆ ์ค๊ณ์ ๋ชฉํ๋ ๊ฐ์ฒด ์ฌ์ด์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถฐ ๋ณ๊ฒฝ์ด ์ฉ์ดํ ์ค๊ณ๋ฅผ ๋ง๋๋ ๊ฒ์ผ๋ก ์ผ์์ผ ํ๋ค.