2장에서는 영화 예매 시스템을 만든다. 이를 위해 "영화"와 "상영"이라는 용어를 구분한다.

"영화"는 영화에 대한 기본 정보를 표현하고, 제목, 상영시간, 가격 정보와 같이 영화가 가지고 있는 기본적인 정보를 가리킨다.

"상영"은 상영 일자, 시간, 순번 등을 가리킨다.

 

특정한 조건에서는 영화 요금을 할인 받는다.

 

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

협력, 객체, 클래스

 

객체지향은 객체를 지향하는 것이다. 

객체지향 프로그램을 작성할 때 어떤 클래스가 필요한지 먼저 고민을 하게된다면 그것은 객체지향의 본질과 멀다.

객체지향 채러다임으로의 전환을 하기 위해서는 다음의 두 가지에 집중해야 한다.

 

  • 어떤 객체들이 필여한지 고민하라. 어떤 객체들이 어떤 상태와 행동을 가지는지를 먼저 결정해야 한다.
  • 객체를 독립적인 존재가 아니라 기능을 구현하기 위해 협력하는 공동체의 일원으로 봐야 한다.

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

이 챕터에서 만들고자하는 프로그램의 도메인이 무엇일까? 소프트웨어는 사용자가 원하는 어떤 문제를 해결하기 위해 만들어진다. 영화 예매 시스템의 목적은 영화를 좀 더 쉽고 빠르게 예매하려는 사용자의 문제를 해결하는 것이다. 이 처럼 문제를 해결하기 위해 사용자가 프로그램을 사용하는 분야를 도메인이라 한다.

 

"상영"을 구현하기 위해서 Screening 클래스에 영화,순번,상영 시작 시간을 인스턴스로 받아 구현 했다.

이떄 인스턴스 변수는 private이고 메서드는 public으로 구현 되었다. 이는 외부에서는 객체의 속성에 직접 접근할 수 없게 막고, 메서드를 통해 내부 상태만 변경할 수 있게 했다.

 

협력하는 객체들의 공동체

영화 요금을 계산하기 위해 Screening, Movie, Reservation 인스턴스들은 서로의 메서드를 호출하며 상호 작용했다.

 

 

할인 요금 구하기

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

상속, 다형성으로 구성된 코드로 각자 알맞은 역할에 맞는 행동을하게 구성되어 있다.

 

할인 정책과 할인 조건

할인 정책은 금액 할인 정책과 비율 할인 정책으로 구분된다. 두 가지 할인 정책을 각각 AmountDiscountPolicy와 PercentDiscountPolicy라는 클래스로 구현한다.

 

할인 정책 구성하기

 

우리가 일반적으로 알듯이 하나의 영화에 대해 단 하나의 할인 정책만 설정되는게 일반적이다. 하지만 할인 조건이 여러개를 적용한다. 이를 위 프로그램은 인스턴스 갯수로 제약했다.

 

상속과 다형성

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

Movie의 인스턴스는 실행 시에 다른 클래스들의 인스턴스에 의존해야한다. 하지만 코드 수준에서 Movie클래스는 다른 클래스 중 어떤 것에도 의존하지 않는다. 하지만 오류가 일어나지 않는다.

 

차이에 의한 프로그래밍

그 다른 클래스들이  Movie클래스가 코드상에서 의존하고 있는 DiscountPolicy를 상속받고 있기 때문이다.

이처럼 부모 클래스와 다른 부분만을 추가해서 새로운 클래스를 쉽고 빠르게 만드는 방법을 차이에 의한 프로그래밍이라고 부른다.

 

 

 

 

 

 

 

 

'오브젝트 : 코드로 이해하는 객체지향 설계' 카테고리의 다른 글

책임 할당하기  (0) 2023.08.11
역할,책임,협력  (0) 2023.07.28
객체,설계  (0) 2023.07.14

+ Recent posts