TIL

02 객체지향 프로그래밍

01 영화 예매 시스템

02 객체지향 프로그래밍을 향해

도메인의 구조를 따르는 프로그램 구조

클래스 구현하기

클래스를 구현하거나 사용할 때 가장 중요한 것은 클래스 경계를 구분 짓는 것. 훌륭한 설계의 핵심은 어떤 부분을 공개하고 숨길지 결정하는 것. 경계의 명확성이 객체의 자율성을 보장한다.

협력하는 객체들의 공동체

협력에 관한 짧은 이야기

03 할인 요금 구하기

할인 요금 계산을 위한 협력 시작하기

할인 정책과 할인 조건

할인 정책 구성하기

Movie avater = new Movie("아바타", 
    Duration.ofMinutes(120),
    Money.wons(10000),
    new AmountDiscountPolicy(Money.wons(800),
        new SequenceCondition(1),
        new SequenceCondition(10),
        new PeriodCondition(...), 
        new PeriodCondition(...))));

04 상속과 다형성

컴파일 시간 의존성과 실행 시간 의존성

차이에 의한 프로그래밍

상속과 인터페이스

다형성

인터페이스와 다형성

05 추상화와 유연성

추상화의 힘

유연한 설계

책임의 위치를 결정하기 위해 조건문을 사용하는 것은 협력적인 설계 측면에서 대부분 좋지 않은 선택이다. (할인 금액 계산 책임의 위치가 Movie이냐, DiscoutPolicy냐가 조건문에 의해 나뉘고 있다.)

추상 클래스와 인터페이스 트레이드 오프

모든 구현과 관련된 것들은 트레이드 오프의 대상이다. 사소한 결정이라도 트레이드오프를 통해 얻어진 결론과 그렇지 않은 결론의 차이는 크다. 고민하고, 트레이드오프하라.

코드 재사용

상속

합성