목록기술 서적/OOP (13)
개발자는 기록이 답이다
2장에서는 클래스, 추상 클래스, 인터페이스를 조합해서 객체 지향 프로그램을 구조화하는 기본적인 방법과 상속을 이용해 다형성을 구현하는 기법을 소개했다. 다형성이 지연 바인딩이라는 매커니즘을 통해 구현된다는 사실도 설명했고, 상속은 코드를 재사용할 수 있는 가장 널리 알려진 방법이지만 캡슐화의 측면에서 합성이 더 좋은 방법이라는 사실을 이해했다. 또한, 유연한 객체지향 프로그램을 위해서는 컴파일 시간 의존성과 실행 시간 의존성이 달라야 한다는 사실 역시 알게 됐다. 객체지향 패러다임의 관점에서 핵심은 역할(role), 책임(responsibility), 협력(collaboration)이다. 클래스, 상속, 지연바인딩이 중요하지 않은것은 아니지만 구현 측면에 치우쳐 있으며 객체지향 패러다임의 본질과 거리가..
4. 상속과 다형성 Movie클래스 어디에서도 할인 정책이 금액인지 비율인지 판단하지 않는다. Movie 내부에 할인 정책을 결정하는 조건문이 없음에도 어떻게 영화 요금을 계산할 때 할인 정책을 선택할 수 있었을까? public class Movie { private String title; private Duration runningTime; private Money fee; private DiscountPolicy discountPolicy; // 금액할인? 비율할인? public Movie(String title, Duration runningTime, Money fee, DiscountPolicy discountPolicy) { this.title = title; this.runningTime =..
1. 영화 예매 시스템 요구사항 살펴보기 사용자는 온라인 영화 예매 시스템을 이용해 쉽고 빠르게 보고 싶은 영화를 예매할 수 있다. 영화 : 영화에 대한 기본 정보를 표현한다. 제목, 상영시간, 가격 정보와 같이 영화가 가지고 있는 기본적인 정보를 가진다 상영 : 실제로 관객들이 영화를 관람하는 사건을 표현한다. 상영 일자 , 시간, 순번 등을 가리킨다. 특정한 조건을 만족하는 예매자는요금을 할인받을 수 있다, 할인액을 결정하는 두 가지 규칙이 존재하는데, 하나는 할인 조건(discount condition)이라고 부르고, 다른 하나는 할인 정책(discount policy)이라고 부른다. '할인 조건'은 가격의 할인 여부를 결정한다. 다수의 할인 조건을 함께 지정할 수 있으며, 순서 조건과 기간 조건을..
3. 설계 개선하기 이전 포스팅에서 설명했던 것을 토대로 변경과 의사소통이라는 문제는 서로 엮여있다. 코드의 의도를 정확하게 파악할 수 있도록 하려면, Audience와 TicketSeller를 변경할 때 Theater도 함께 변경해야 한다. Theater가 Audience와 TicketSeller에 관해 너무 세세한 부분까지 알지 못하도록 해야 한다. 관람객이 스스로 가방 안의 현금과 초대장을 처리하고, 판매원이 스스로 매표소의 티켓과 판매 요금을 다르게 한다면 문제를 해결할 수 있다. 다시 말해서 관람객과 판매원을 자율적인 존재로 만들면 된다. 자율성을 높이자 1. Theater의 enter 메서드에서 TicketOffice에 접근하는 모든 코드를 TicketSeller내부로 숨기기 여기서 Ticke..