We will find a way, we always have.

-interstellar

오브젝트 5

[오브젝트] 5장 책임 할당하기

이번 장에서는 이전 장과는 달리 데이터에 초점을 맞추는 것이 아닌 객체에 책임을 할당하는데에 초점을 맞추는 방식을 살펴본다. 1. 책임 주도 설계를 향해 데이터 중심의 설계에서 책임 중심의 설계로 전환하기 위해서는 다음의 두 가지 원칙을 따라야 한다. 데이터보다 행동을 먼저 결정하라 협력이라는 문맥 안에서 책임을 결정하라 책임 주도 설계 책임 주도 설계의 흐름은 아래와 같다. 시스템이 사용자에게 제공하는 기능인 시스템 책임을 파악한다. 시스템 책임을 더 작은 책임으로 분할한다. 분할된 책임을 수행할 수 있는 적절한 객체 또는 역할을 찾아 책임을 할당한다. 객체가 책임을 수행하는 도중 다른 객체의 도움이 필요한 경우 이를 책임질 적절한 객체 또는 역할을 찾는다. 해당 객체 또는 역할에게 책임을 할당함으로써..

OOP 2023.12.09

[오브젝트] 4장 설계 품질과 트레이드오프

객체지향 설계의 핵심은 역할, 책임, 협력이다. 올바른 객체에게 책임을 할당하면서 낮은 결합도와 높은 응집도를 가진 구조를 창조하는 활동이다. 훌륭한 설계란 합리적인 비용 안에서 변경을 수용할 수 있는 구조를 만드는 것이다. 적절한 비용 안에서 쉽게 변경할 수 있는 설계는 응집도가 높고 서로 느슨하게 결합돼 있는 요소로 구성된다. 이를 달성하기 위한 중요한 원칙은 객체의 상태가 아니라 객체의 행동, 더 나아가 책임에 초점을 맞추는 것이다. 객체를 단순한 데이터의 집합으로 바라보는 시각은 객체의 내부 구현을 퍼블릭 인터페이스에 노출시키는 결과를 낳기 때문에 결과적으로 설계가 변경에 취약해진다. 이번 장에서는 영화 예매 시스템을 책임이 아닌 상태를 표현하는 데이터 중심의 설계를 먼저 살펴보고 객체지향적으로 ..

OOP 2023.12.02

[오브젝트] 3장 역할, 책임, 협력

객체지향 패러다임의 핵심은 역할(role), 책임(responsibility), 협력(collaboration)이다. 객체지향의 본질은 협력하는 객체들의 공동체를 창조하는 것이다. 객체지향 설계의 핵심은 협력을 구성하기 위해 적절한 객체를 찾고 적절한 책임을 할당하는 과정에서 드러난다. 1. 협력 영화 예매 시스템 돌아보기 영화 예매라는 기능을 완성하기 위해 객체들이 서로 메시지를 주고 받으며 상호작용하고 있다. 위 그림과 같이 객체지향 원칙을 따르는 애플리케이션의 제어 흐름은 어떤 하나의 객체에 의해 통제되지 않고 다양한 객체들 사이에 균형 있게 분배되는 것이 일반적이다. 객체들은 요청의 흐름을 따라 자신에게 분배된 로직을 실행하면서 애플리케이션의 전체 기능을 완성한다. 이처럼 객체들이 애플리케이션의 ..

OOP 2023.11.28

[오브젝트] 2장 객체지향 프로그래밍

1. 영화 예매 시스템 요구사항 살펴보기 영화 예매 시스템을 살펴보자. 여기에는 "영화"와 "상영"이라는 용어가 등장한다. 영화는 제목, 가격 등과 같이 영화에 대한 정보를 나타내고, 상영은 실제로 관객들이 영화를 관람하는 사건을 표현한다. 관객이 실제로 예매를 하는 대상은 특정 시간에 상영되는 영화이다. 특정한 조건을 만족하는 예매자는 요금을 할인받을 수 있다. 이때 필요한 것은 할인 조건(discount condition)과 할인 정책(discount policy)이다. 할인 조건은 '순서 조건'과 '기간 조건'으로 나뉘는데 순서 조건은 특정한 상영 순번을 가진 영화에 대해, 기간 조건은 요일, 시작 시간, 종료 시간을 정하여 해당 기간에 포함되는 영화에 대해 할인 혜택을 제공하는 것이다. 할인 정책..

OOP 2023.11.25

[오브젝트] 1장 객체, 설계

이론이 먼저일까, 실무가 먼저일까? 로버트 L. 글래스 1. 티켓 판매 어플리케이션 구현하기 요구사항 소극장의 홍보를 위해 추첨을 통해 관객들에게 무료 공연 초대권을 발송한다. 관람객의 소지품은 초대장, 현금, 티켓으로 제한하고 이를 보관할 용도의 가방을 들 고 온다. 클래스 구현 관람객이 소지품을 보관할 Bag 클래스를 추가하고, 초대장의 보유 여부를 판단하는 hasInvitation 메서드와 티켓의 소유 여부를 판단하는 hasTicket 메서드, 현금을 변화시키는 plusAmount, minusAmount 메서드, 그리고 초대장을 티켓으로 교환하는 setTicket 메서드를 구현한다. Bag 인스턴스의 상태는 현금과 초대장을 함께 보관하거나, 초대장 없이 현금만 보관하는 두 가지 상태중 하나이다. 이..

OOP 2023.11.21