객체지향 패러다임의 관점에서 핵심은 역할(role), 책임(responsbility), 협력(collaboration)
01 협력
영화 예매 시스템 돌아보기
- 객체지향 원칙을 따르는 어플리케이션
- 상호작용 = 협력
- 수행하는 로직 = 책임
- 책임들이 모여 객체 수행하는 역할을 구성
협력
- 메시지 전송(message sending)
- 객체 사이의 협력을 위해 사용할 수 있는 유일한 커뮤니케이션 수단
- 협력 = 다른 객체에게 무언가를 요청하는 것
- 메시지를 수신한 객체는 메서드를 실행해 요청에 응답
- 객체가 자신의 일을 스스로 처리할 수 있는 존재라는 것을 의미
- 자율적인 객체
- 자신의 상태를 직접 관리
- 스스로의 결정에 따라 행동
- 캡슐화를 통해 자율적인 객체를 만들 수 있다.
- 책임을 수행하던 중 필요한 정보를 외부의 적절한 객체에 메시지를 전송해 협력을 요청한다.
협력이 설계를 위한 문맥을 결정한다
- 협력
- 객체가 필요한 이유와 객체가 수행하는 행동의 동기를 제공
- 협력이 존재하기 때문에 객체가 존재하는 것
- 객체의 해동과 상태를 결정
- 협력은 객체를 설계하는 데 필요한 문맥(context)을 제공
02 책임
책임이란 무엇인가
- 협력에 참여하기 위해 객체가 수행하는 행동
- 응집도 있는 행위의 집합
- 책임이 외부의 인터페이스와 내부의 속성을 결정
책임 할당
- 객체에게 책임을 할당하기 위해서 협력이라는 문백을 정의 해야 한다.
- 기능을 시스템이 담당할 하나의 책임
- 객체지향 설계는 협력에 필요한 메시지를 찾고 메시지에 적절한 객체를 선택하는 반복적인 과정
책임 주도 설계(Responsibility-Driven Design, RDD)
- 책임 파악
- 책임 분할
- 책임 할당
- 도움이 필요한 경우 이를 책임질 객체 또는 역할을 찾는다.
- 두 객체가 협력하게 한다.
메시지가 객체를 결정한다.
- 메시지가 객체를 선택
- 최소한의 인터페이스
- 꼭 필요한 퍼블릭 인터페이스를 가질 수 있다.'
- 추상적인 인터페이스
- 어떻게 수행하는지를 노출해서는 안됨
- 무엇을 수행할지에 초점을 맞춘다.
행동이 상태를 결정한다.
- 행동이 객체를 객체 답게 만든다.
- 행동이 중요하다.
- 무엇을 제공하고 무엇을 얻어야 하는지 고민해야 한다.
03 역할
역할과 협력
- 역할
- 협력 안에서 수행하는 책의 집합
- 실제 모델링 시 역할에게 책임을 할당하게 된다.
유연하고 재사용 가능한 협력
- 역할을 통해 재사용 가능한 협력을 얻을 수 있다.
- 역할은 일종의 객체를 바꿔 낄 수 있는 '슬롯'
- 역할을 통해 추상화 할 수 있다.
객체 대 역할
- 역할은 협력 안에서 각자의 위치를 가지는 객체들에 대한 별칭
- 처음부터 어떤 것이 역할이고 어떠 것이 객체인지 또렷하게 알 수 없다.
- 따라서 단순하게 객체로 시작하여 반복적으로 책임과 협력을 정제해가면서 필요한 순간에 객체로부터 역할을 분리해내자
- 협력을 추상적인 역할의 관점에서 설계하면 협력이 유연하고 재사용이 가능해진다.
역할과 추상화
- 추상화의 장점
- 세부 사항에 억눌리지 않고도 상위 수준의 정책을 쉽고 간단하게 표현 가능
- 설계를 유연하게 만들 수 있다.
배우와 배역
- 협력 = 연극
- 객체는 협력이라는 실행 문맥 안에서 특정한 역할을 수행
- 역할은 잠시동안에만 존재하는 일시적인 개념
- 객체 역시 여러 협력에 참여하며 다양한 역할 수행할 수 있다.
- 객체는 다수의 역할을 보유할 수 있지만 객체가 참여하는 특정 협력은 객체의 한 가지 역할만 바라볼 수 있다.