3장. 역할, 책입, 협력
3장. 역할, 책입, 협력
- 객체지향 패어다임의 관점에서 핵심은 역할(role), 책임(responsibility), 협력(collaboration) 이다.
- 클래스와 상속은 구현 매커니즘일 뿐
❐ 1. 협력
🌀 1-1. 영화 예매 시스템 돌아보기
영화 시스템 예시
- 객체들이 애플리케이션 기능을 구현하기 위해 수행하는 상호작용을 협력이라고 한다.
- 객체가 협력에 참여하기 위해 수행하는 로직을 책임이라고 부른다.
- 객체들이 협력 안에서 수행하는 책임들이 모여 객체가 수행하는 역할을 구성한다.
🌀 1-2. 협력
협력이란?
- 협력은 객체지향의 세계에서 기능을 구현할 수 있는 유일한 방법
- 객체들은 메시지 전송을 통해 서로 소통한다.
- 메시지를 수신한 객체는 메서드를 실행해 요청에 응답한다.
- 객체가 메시지를 처리할 방법을 스스로 선택한다.
예시
- 발신자 :
Screening - 메시지 :
calculateMovieFee(...) - 수신자 :
Movie
정리
- 객체들 사이의 협력을 구성하는 일련의 요청/응답의 흐름을 통해 애플리케이션 기능이 구현된다.
🌀 1-3. 협력이 설계를 위한 문맥을 결정한다.
객체가 가질 수 있는 ‘행동’을 결정하는 기준은?
- 협력 안에서 객체가 처리할 메시지로 결정된다.
- 협력이 바뀌면 행동도 바뀐다.
그렇다면 ‘객체의 상태’를 결정하는 기준은?
- 객체가 행동하는데 필요한 정보에 의해 결정된다.
- 객체는 스스로 결정하고 관리하는 자율적인 존재이기 때문
- Movie를 예로 들면…
- 행동 : 요금 계산
- 상태(행동을 수행하는데 필요한 정보) : fee, discountPolicy
정리하면..
- 객체가 참여하는 협력이 객체를 구성하는 행동과 상태를 모두 결정한다.
- 따라서, 협력은 객체를 설계하는 일종의 문맥(context)을 제공한다.
❐ 2. 책임
🌀 2-1. 책임이란 무엇인가
책임이란? 무엇을 알고 있는가(knowing) + 무엇을 할 수 있는가(doing)
- 객체지향 설계에서 가장 중요한 요소로, 협력에 참여하기 위해 객체가 수행하는 행동
- 책임이란 객체에 의해 정의되는 응집도 있는 행위의 집합으로,
객체가 유지해야 하는 정보와 수행할 수 있는 행동에 대해 개략적으로 서술한 문장이다. - 예시
- Screening
- doing : 영화를 예매하는 것
- knowing : 자신이 상영할 영화
- Movie
- doing : 요금을 계산하는 것
- knowing : 가격과 어떤 할인 정책이 적용됐는지
- Screening
책임 vs 메시지
- 일반적으로 책임과 메시지의 크기는 다르다.
- 책임은 메시지보다 추상적이고 개념적으로도 더 크다.
- 하나의 책임이 여러 메시지로 분할되기도 하고,
하나의 객체가 수행할 수 있다고 생각했던 책임이 나중에는 여러 객체들의 협력으로만 해결되는 경우도 있다.
‘아는 것’과 ‘하는 것’은 밀접하게 연관대 있다.
- 객체는 자신이 맡은 책임을 수행하는 데 필요한 정보를 알고 있을 책임이 있다.
CRC(Candidates Responsibility Collaborator) 카드
- CRC 카드는 역할을 식별하고, 책임을 할당하며, 협력을 명시적으로 표현하는
구체적이면서도 실용적인 설계 기법이다.
🌀 2-2. 책임 할당
Information Expert(정보 전문가) 패턴
- 자율적인 객체를 만드는 가장 기본적인 방법은
책임을 수행하는 데 필요한 정보를 잘알고 있는 전문가에게 그 책임을 할당하는 것
이 기사는 저작권자의
CC BY 4.0
라이센스를 따릅니다.

