2장 - HONGDAE-OBJECT/OOP GitHub Wiki

1 영화 예매 시스템 구현

  • 구현순서
    • 요구사항
    • 도메인 구조 설계
    • 클래스 구현

요구사항

  • 영화 애매 시스템에서 요구되는 사항에 대해 정의
    • ex) 영화 예매, 할인 etc..

도메인 구조 설계

  • 도메인 : 사용자가 프로그램을 사용하는 분야를 도메인이라고 한다.
  • 도메인 추출 : 영화, 상영, 예매, 요금, 할인 조건, 할인 정책
  • 도메인 구조 설계 1

클래스 구현하기

  • 객체지향 프로그래밍 조건

    • Encapsulation(캡슐화), Polymorphism(다형성), Abstraction(추상화), Inheritance(상속), Composition(합성)
    • 캡슐화 : 데이터와 기능을 객체 내부로 묶는 것(접근지정자를 사용하여 정보 은닉)
    • 다형성 : 협력하는 객체의 실제 클래스에 따라 메서드의 내용이 달라진다. (오버라이딩, 템플릿 메소드)
    • 추상화 : 일반적인 개념을 표현 객체로 표현함, 설계의 유연성이 높아진다.
    • 상속 : 부모클래스의 속성을 자식 클래스가 이어 받는다. (코드 재사용) is a
    • 합성(구성) : 클래스가 다른 클래스의 구성요소가 된다. 기존 상속의 문제점을 해결, 객체간의 의존성을 줄인다. has a
  • 상속의 문제점

    • 캡슐화 위반(자식과 부모가 강하게 결합), 설계가 유연하지 못하다. (실행 시점에 객체 종류를 변경하는 것이 불가능)

객체지향 조건을 사용하여 영화 예매 시스템 설계

2

  • 문제점 : 할인 정책이 없는 경우 NoneDiscountPolicy를 정책으로 사용하고 있지만, 할인율이 없지만 getDiscontAmount()를 통해 할인율 함수를 호출하고 있음

추상 클래스와 인터페이스 트레이드 오프 사용하여 설계

3

  • DiscountPolicy를 인터페이스로 만들고, DiscountPolicy 구현하는 2가지클래스를 사용함으로써, 정책이 없는 경우 getDiscontAmount() 실행하지 않는다.

링크

[코드] (https://github.com/JongMinP/object/tree/master/src/main/java/section2)