Skip to content

Latest commit

ย 

History

History
108 lines (76 loc) ยท 6.88 KB

object_ch01_3.md

File metadata and controls

108 lines (76 loc) ยท 6.88 KB

์˜ค๋ธŒ์ ํŠธ - ์„ค๊ณ„ ๊ฐœ์„ ํ•˜๊ธฐ

ํ•ด๋‹น ์ฝ”๋“œ์—์„œ์˜ ๋ฌธ์ œ์ ์€ ๊ธฐ๋Šฅ๋งŒ ์ œ๋Œ€๋กœ ์ˆ˜ํ–‰ํ•  ๋ฟ, ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ต๊ณ  ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ ์—ญ์‹œ ์‰ฝ์ง€ ์•Š๋‹ค.

๋ณ€๊ฒฝ๊ณผ ์˜์‚ฌ์†Œํ†ต์˜ ๋ฌธ์ œ๊ฐ€ ์„œ๋กœ ์—ฎ์—ฌ์žˆ๋Š”๋ฐ, ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ค์šด ์ด์œ ๋Š” Theater๊ฐ€ ๊ด€๋žŒ๊ฐ์˜ ๊ฐ€๋ฐฉ๊ณผ ํŒ๋งค์›์˜ ๋งคํ‘œ์†Œ์— ์ง์ ‘ ์ ‘๊ทผํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด ๊ฒƒ์€ ๊ด€๋žŒ๊ฐ๊ณผ ํŒ๋งค์›์ด ์ž์‹ ์˜ ์ผ์„ ์Šค์Šค๋กœ ์ฒ˜๋ฆฌํ•ด์•ผํ•œ๋‹ค๋Š” ํ†ต์ƒ์ ์ธ ์ง๊ด€๊ณผ ์–ด๊ธ‹๋‚œ๋‹ค. ์ฆ‰ ์ฝ”๋“œ์˜ ๊ฐ์ฒด๊ฐ€ ์„œ๋กœ ์˜์‚ฌ์†Œํ†ต์„ ํ•˜์ง€ ๋ชปํ•˜๋ฏ€๋กœ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ต๋‹ค.

์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, Theater๊ฐ€ Audience์™€ TicketSeller์— ๊ด€ํ•ด ์„ธ์„ธํ•œ ๋ถ€๋ถ„์„ ์•Œ ์ˆ˜ ์—†๋„๋ก ํ•œ๋‹ค. ์ฆ‰ ๊ด€๋žŒ๊ฐ๊ณผ ํŒ๋งค์›์„ ์‹ค์ œ ์„ธ์ƒ๊ณผ ๊ฐ™์ด ์ž์œจ์ ์ธ ์กด์žฌ๋กœ ๋งŒ๋“ค๋ฉด ๋œ๋‹ค.

์ž์œจ์„ฑ์„ ๋†’์ด๊ธฐ

๊ธฐ์กด 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);
        }
    }
}

๋ณ€๊ฒฝ

public class TicketSeller {
    private TicketOffice ticketOffice;

    public TicketSeller(TicketOffice ticketOffice) {
        this.ticketOffice = ticketOffice;
    }

    public void sellTo() {
        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);
        }
    }
}

Theater์˜ enter ๋ฉ”์„œ๋“œ์˜ ์ฝ”๋“œ๋ฅผ TicketSeller์˜ sellTo๋กœ ์˜ฎ๊ฒจ์ค€๋‹ค.

๊ฒฐ๊ณผ์ ์œผ๋กœ ticketOffice์— ๋Œ€ํ•œ ์ ‘๊ทผ์€ ์˜ค์ง TicketSeller๋ฅผ ํ†ตํ•ด์„œ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค. ํ‹ฐ์ผ“์„ ๊บผ๋‚ด๊ฑฐ๋‚˜ ํŒ๋งค ์š”๊ธˆ์„ ์ ๋ฆฝํ•˜๋Š” ์ผ์„ ์Šค์Šค๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž์œจ์ ์ธ ๊ฐ์ฒด๋กœ ๋ณ€๋ชจํ•œ๋‹ค.

์ด๋ ‡๊ฒŒ ๊ฐœ๋…์ ์ด๋‚˜ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๊ฐ์ฒด ๋‚ด๋ถ€์˜ ์„ธ๋ถ€์ ์ธ ์‚ฌํ•ญ์„ ๊ฐ์ถ”๋Š” ๊ฒƒ์ด ๊ฐ์ฒด ์ง€ํ–ฅ์˜ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฐœ๋… ์ค‘ ํ•˜๋‚˜์ธ ์บก์Šํ™”์ด๋‹ค.

Theater์˜ enter ๋ฉ”์†Œ๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฐ„๋‹จํžˆ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.

public class Theater {
    private TicketSeller ticketSeller;

    public Theater(TicketSeller ticketSeller) {
        this.ticketSeller = ticketSeller;
    }

    public void enter(Audience audience) {
        ticketSeller.sellTo(audience);
    }
}

Theater๋Š” ์˜ค์ง TicketSeller์˜ ์ธํ„ฐํŽ˜์ด์Šค์—๋งŒ ์˜์กดํ•œ๋‹ค. TicketSeller๊ฐ€ ๋‚ด๋ถ€์— TicketOffice ์ธ์Šคํ„ด์Šค๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ๊ตฌํ˜„์˜ ์˜์—ญ์— ์†ํ•œ๋‹ค. ๊ฐ์ฒด๋ฅผ ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ตฌํ˜„์œผ๋กœ ๋‚˜๋ˆ„๊ณ , ์ธํ„ฐํŽ˜์ด์Šค๋งŒ์„ ๊ณต๊ฐœํ•˜๋Š” ๊ฒƒ์ด ๊ฐ์ฒด ์‚ฌ์ด์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถฐ ๋ณ€๊ฒฝํ•˜๊ธฐ ์‰ฝ๊ณ  ํ™•์žฅ์„ฑ์ด ์ข‹์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค. ์ฆ‰ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ์„ค๊ณ„์›์น™์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

์œ„์™€ ๊ฐ™์ด Audience์˜ ์บก์Šํ™” ์—ญ์‹œ ๊ฐœ์„ ๊ฐ€๋Šฅํ•˜๋‹ค. Bag์— ์ ‘๊ทผํ•˜๋Š” ๋ชจ๋“  ๋กœ์ง์„ Audience ์Šค์Šค๋กœ ํ•  ์ˆ˜ ์žˆ๋„๋ก buy ๋ฉ”์„œ๋“œ๋ฅผ Audience ๋‚ด๋ถ€์— ์ถ”๊ฐ€ํ•˜๊ณ , sellTo ๋ฉ”์„œ๋“œ์—์„œ getBag ๋ฉ”์„œ๋“œ์— ์ ‘๊ทผํ•˜๋Š” ๋ถ€๋ถ„์„ buy๋กœ ์˜ฎ๊ฒจ์ฃผ๋ฉด ๋œ๋‹ค.

์œ„์˜ ๊ณผ์ •์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์€ Audience๋‚˜ TicketSeller์˜ ๋‚ด๋ถ€ ๊ตฌํ˜„์„ ๋ณ€๊ฒฝํ•˜๋”๋ผ๋„ Theater๋ฅผ ํ•จ๊ป˜ ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ์‚ฌ์‹ค์ด๋‹ค.

์ ˆ์ฐจ์ง€ํ–ฅ๊ณผ ๊ฐ์ฒด์ง€ํ–ฅ

์ˆ˜์ •ํ•˜๊ธฐ ์ „ ์ฝ”๋“œ์—์„œ๋Š” Theater์˜ enter ๋ฉ”์„œ๋“œ ๋‚ด์—์„œ Audience์™€ TicketSeller๋กœ ๋ถ€ํ„ฐ Bag๊ณผ TicketOfiice๋ฅผ ๊ฐ€์ ธ์™€ ๊ด€๋žŒ๊ฐ์„ ์ž…์žฅ์‹œํ‚ค๋Š” '์ ˆ์ฐจ'๋ฅผ ๊ตฌํ˜„ํ•˜์˜€๋‹ค. Audience, TicketSeller, Bag, TicketOffice๋Š” ๊ด€๋žŒ๊ฐ์„ ์ž…์žฅ์‹œํ‚ค๋Š” ๋ฐ ํ•„์š”ํ•œ ์ •๋ณด๋งŒ์„ ์ œ๊ณตํ•˜๊ณ , ์ฒ˜๋ฆฌ๋Š” Theater์˜ enter ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€์—์„œ๋งŒ ์ด๋ฃจ์–ด์ง„๋‹ค.

์ด๋Ÿฌํ•œ ๊ด€์ ์—์„œ Theater์˜ enter ๋ฉ”์„œ๋“œ๋Š” ํ”„๋กœ์„ธ์Šค์ด๋ฉฐ, Audience, TicketSeller, Bag, TicketOffice๋Š” ๋ฐ์ดํ„ฐ ์ด๋‹ค.

์ด์ฒ˜๋Ÿผ ํ”„๋กœ์„ธ์Šค์™€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ„๋„์˜ ๋ชจ๋“ˆ์— ์œ„์น˜์‹œํ‚ค๋Š” ๋ฐฉ์‹์ด ๋ฐ”๋กœ ์ ˆ์ฐจ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋‹ค.

์œ„์—์„œ ์„ค๋ช…ํ•œ ๋ฐ”์™€ ๊ฐ™์ด, ์ผ๋ฐ˜์ ์œผ๋กœ ์ ˆ์ฐจ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์šฐ๋ฆฌ์˜ ์ง๊ด€์— ์œ„๋ฐฐ๋œ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ(์‹ค์ œ ์„ธ๊ณ„์—์„œ๋Š”) ๊ด€๋žŒ๊ฐ๊ณผ ํŒ๋งค์›์ด ์ž์‹ ์˜ ์ผ์„ ์Šค์Šค๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ , ๋˜ ๊ทธ๋ ‡๊ฒŒ ํ• ๊ฑฐ๋ผ ์˜ˆ์ƒํ•˜์ง€๋งŒ ์ ˆ์ฐจ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์„ธ๊ณ„์—์„œ๋Š” ๋‘ ๊ฐ์ฒด ๋ชจ๋‘ ์ˆ˜๋™์ ์ธ ์กด์žฌ์ผ ๋ฟ์ด๋‹ค. ๋” ํฐ ๋ฌธ์ œ๋Š” ์ด๋Ÿฌํ•œ ์ˆ˜๋™์ ์ธ ๊ฐ์ฒด(๋ฐ์ดํ„ฐ)์˜ ๋ณ€๊ฒฝ์ด ์–ด๋ ค์›Œ ํ™•์žฅ์„ฑ์ด ์ €ํ•ด๋œ๋‹ค๋Š” ์ ์— ์žˆ๋‹ค.

์ •๋ฆฌํ•˜์ž๋ฉด ์ ˆ์ฐจ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•„์š”ํ•œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ์— ์˜์กดํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ œ์  ๋•Œ๋ฌธ์—, ๋ณ€๊ฒฝ์— ์ทจ์•ฝํ•˜๋‹ค.

์ž์‹ ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์Šค์Šค๋กœ ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐ ๊ฐ์ฒด๋ณ„๋กœ ์ด๋™์‹œ์ผœ, ๋ฐ์ดํ„ฐ์™€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ชจ๋‘ ๋™์ผํ•œ ๋ชจ๋“ˆ ๋‚ด๋ถ€์— ์œ„์น˜ํ•˜๋„๋ก ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ•˜๋Š” ๋ฐฉ์‹์ด ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

์š”์•ฝํ•˜์ž๋ฉด, ํœผ๋ฅญํ•œ ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„์˜ ํ•ต์‹ฌ์€ ์บก์Šํ™”๋ฅผ ํ†ตํ•ด ์˜์กด์„ฑ์„ ์ ์ ˆํžˆ ๊ด€๋ฆฌํ•˜์—ฌ ๊ฐ์ฒด ์‚ฌ์ด์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๋Š” ๊ฒƒ์ด๋‹ค.

์ฑ…์ž„์˜ ์ด๋™

๋‘ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹ ์‚ฌ์ด์˜ ๊ทผ๋ณธ์ ์ธ ์ฐจ์ด๋Š” ์ฑ…์ž„์˜ ์ด๋™์ด๋‹ค. ์ฑ…์ž„์€ ๊ธฐ๋Šฅ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ์ฒด์ง€ํ–ฅ์˜ ์šฉ์–ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์‰ฝ๋‹ค.

์ˆ˜์ • ์ „ ์ฝ”๋“œ์—์„œ๋Š” ์ฑ…์ž„์ด Theater์—๋งŒ ์ง‘์ค‘๋˜์–ด ์žˆ์ง€๋งŒ, ์ˆ˜์ • ํ›„์—๋Š” Audience์™€ TicketSeller๋กœ ๊ฐ๊ฐ ์ฑ…์ž„์ด ์ด๋™ํ•˜์˜€๋‹ค.

๊ฐ์ฒด์ง€ํ–ฅ์—์„œ๋Š” ๊ฐ ๊ฐ์ฒด๊ฐ€ ์ž์‹ ์„ ์Šค์Šค๋กœ ์ฑ…์ž„์ง€๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์„ค๊ณ„ํ•ด์•ผ ํ•œ๋‹ค. ๊ฐ์ฒด ์ง€ํ–ฅ์€ ์Šค์Šค๋กœ ์ฑ…์ž„์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž์œจ์ ์ธ ๊ฐ์ฒด๋“ค์˜ ๊ณต๋™์ฒด๋ฅผ ๊ตฌ์„ฑํ•˜๋ฉฐ ์™„์„ฑ๋œ๋‹ค.

์„ค๊ณ„๋ฅผ ์–ด๋ ต๊ฒŒ ํ•˜๋Š” ๊ฒƒ์€ ์˜์กด์„ฑ์ด๊ธฐ ๋•Œ๋ฌธ์—, ๋ถˆํ•„์š”ํ•œ ์˜์กด์„ฑ์„ ์ œ๊ฑฐํ•˜์—ฌ ๊ฐ์ฒด ์‚ฌ์ด์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถฐ์•ผ ํ•œ๋‹ค. ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๋Š” ๋ฐฉ๋ฒ•์€ ํƒ€ ๊ฐ์ฒด๊ฐ€ ๋ชฐ๋ผ๋„ ๋˜๋Š” ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ์ฑ…์ž„์„ ๋งก์€ ๊ฐ์ฒด ๋‚ด๋ถ€๋กœ ๊ฐ์ถฐ ์บก์Šํ™”๋ฅผ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์บก์Šํ™”๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด์˜ ์ž์œจ ์„ฑ์„ ๋†’์ด๊ณ , ์‘์ง‘๋„ ๋†’์€ ๊ฐ์ฒด๋“ค ๊ฐ„์— ๊ณต๋™์ฒด๋ฅผ ์ฐฝ์กฐํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค. ์บก์Šํ™”๋œ ์ž์œจ์ ์ธ ๊ฐ์ฒด๋“ค์ด ๋‚ฎ์€ ๊ฒฐํ•ฉ๋„์™€ ๋†’์€ ์‘์ง‘๋„๋ฅผ ํ†ตํ•ด ์„œ๋กœ ํ˜‘๋ ฅํ•˜์—ฌ ์ตœ์†Œํ•œ์˜ ์˜์กด์„ฑ๋งŒ ๊ฐ€์ง€๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ํœผ๋ฅญํ•œ ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„์ด๋‹ค.