01. 협력
- 영화 예매 시스템 돌아보기
협력: 기능 구현을 위한 상호작용
책임: 협력에 참여하기 위해 수행하는 로직
역할: 협력 안에서 수행하는 책임들이 모여 객체가 수행하는 역할을 구성한다.
- 협력
객체가 메시지를 처리할 방법을 스스로 선택한다.(자율적 존재)
자율적 존재가 되기 위해서는 자신이 알고있는 정보를 이용해 직접 요금을 계산해야 한다. (캡슐화)
메시지를 처리하던 중에 직접 처리할 수 없는 정보나 행동이 필요한 경우 또다른 객체에게 도움을 요청한다.
- 협력이 설계를 위한 문맥을 결정한다.
객체의 행동을 결정하는 것은 객체가 참여하고 있는 협력이다.
협력이 바뀌면 객체가 제공해야하는 행동 역시 바뀌어야 한다.
협력 -> 행동 -> 상태
협력이 일종의 문맥(Context)를 제공한다.
02. 책임
- 책임이란 무엇인가
책임의 구분
- 무엇을 알고있는가?
: 사적인 정보에 관해 아는 것
: 관련된 객체에 관해 아는 것
: 자신이 유도하거나 계산할 수 있는 것에 관해 아는 것
- 무엇을 할 수 있는가?
: 객체를 생성하거나 계산을 수행하는 등의 스스로 하는 것
: 다른 객체의 행동을 시작시키는 것
: 다른 객체의 활동을 제어하고 조절하는 것
책임은 객체가 수행할 수 있는 행동을 종합적이고 간략하게 서술하기 때문에
메시지보다 추상적이고 개념적으로도 더 크다.
CRC카드(Candidate, Responsibility, Collaborator): 인덱스 카드를 후보라고 생각하기 시작하면 자연스럽게 인덱스 카드의 구현에 대한 세부적인 결정은 미루고 책임과 협력에 집중할 수 있게 된다.
- 책임 할당
수행할 정보 전문가를 찾는 과정.
- 책임 주도 설계
RDD(책임 주도 설계): 협력을 설계하기 위해서는 책임에 초점을..
- 메시지가 객체를 결정한다.
: 객체가 최소한의 인터페이스를 가질 수 있게 된다.
: 추상적인 인터페이스를 가질 수 있게 된다.
- 행동이 상태를 결정한다.
객체의 상태가 아니라 행동이 중요하다.
03. 역할
- 역할과 협력
역할: 책임의 집합
- 유연하고 재사용 가능한 협력
동일한 책임을 수행하는 역할을 기반으로 두 개의 협력(AmountDiscountPolicy, PercentDiscountPolicy)을 하나로 통합할 수 있다. 중복 코드 제거가 가능해진다. => 추상화(추상 클래스 or 인터페이스)
- 객체 대 역할
· 책임을 수행하는 대상이 한 종류라면 간단하게 객체로 간주. 여러 종류의 객체들이 참여할 수 있다면 역할.
- 역할과 추상화
· 세부사항에 억눌리지 않고도 상위 수준의 정책을 쉽고 간단하게 표현할 수 있다.
· 설계를 유연하게 만들 수 있다. (역할은 슬롯과 같다.)
- 배우와 배역
· 역할은 객체의 페르소나. 동일한 역할을 수행하는 하나 이상의 객체들이 존재
'독서 > Javascript' 카테고리의 다른 글
오브젝트 - 4. 설계 품질과 트레이드오프 (0) | 2021.08.09 |
---|---|
오브젝트 - 2.객체지향 프로그래밍 (0) | 2021.08.08 |
오브젝트 - 1.객체, 설계 (0) | 2021.08.08 |