TIL

01 객체, 설계

01 티켓 판매 애플리케이션 구현하기

객체 설계

02 무엇이 문제인가

예상을 빗나가는 코드

변경에 취약한 코드

03 설계 개선하기

자율성을 높이자

객체를 인터페이스와 구현 부로 나누고 인터페이스만 공개하는 것은 객체 사이 결합도를 낮추고 변경하기 쉬운 코드를 작성하기 위해 따라야 하는 기본적인 설계 원칙

    public class TicketSeller {
        private TicketOffice ticketOffice;
    
        public TicketSeller(TicketOffice ticketOffice) {
            this.ticketOffice = ticketOffice;
        }
    
        public void sellTo(Audience audience) {
            Long amount = audience.buy(ticketOffice.getTicket());
            ticketOffice.plusAmount(amount);
        }
    }
    
    public class Audience {
        private Bag bag;
    
        public Audience(Bag bag) {
            this.bag = bag;
        }
    
        public Long buy(Ticket ticket) {
            if (bag.hasInvitation()) {
                bag.setTicket(ticket);
                return 0L;
            } else {
                bag.setTicket(ticket);
                bag.minusAmount(ticket.getFee());
                return ticket.getFee();
            }
        }
    }

무엇이 개선됐는가

어떻게 한 것인가

캡슐화와 응집도

절차지향과 객체지향

책임의 이동

불필요한 의존성을 제거하여 결합도를 낮춰라. 그러기 위해선 세부사항을 캡슐화해야 한다. 캡슐화를 통해 객체의 자율성과 응집도를 높일 수 있다.

더 개선할 수 있다.

자율적이고 능동적인 객체

04 객체지향 설계

설계가 왜 필요한가

설계란 코드를 배치하는 것이다.

객체지향 설계