2장 - HONGDAE-OBJECT/OOP GitHub Wiki
1 영화 예매 시스템 구현
- 구현순서
- 요구사항
- 도메인 구조 설계
- 클래스 구현
요구사항
- 영화 애매 시스템에서 요구되는 사항에 대해 정의
- ex) 영화 예매, 할인 etc..
도메인 구조 설계
- 도메인 : 사용자가 프로그램을 사용하는 분야를 도메인이라고 한다.
- 도메인 추출 : 영화, 상영, 예매, 요금, 할인 조건, 할인 정책
- 도메인 구조 설계

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

- 문제점 : 할인 정책이 없는 경우 NoneDiscountPolicy를 정책으로 사용하고 있지만, 할인율이 없지만 getDiscontAmount()를 통해 할인율 함수를 호출하고 있음
추상 클래스와 인터페이스 트레이드 오프 사용하여 설계

- DiscountPolicy를 인터페이스로 만들고, DiscountPolicy 구현하는 2가지클래스를 사용함으로써, 정책이 없는 경우 getDiscontAmount() 실행하지 않는다.
링크
[코드] (https://github.com/JongMinP/object/tree/master/src/main/java/section2)