<--SyntaxHighlighter--> SyntaxHighlighter.all();

01. 협력

- 영화 예매 시스템 돌아보기

협력: 기능 구현을 위한 상호작용

책임: 협력에 참여하기 위해 수행하는 로직

역할: 협력 안에서 수행하는 책임들이 모여 객체가 수행하는 역할을 구성한다.

 

- 협력

객체가 메시지를 처리할 방법을 스스로 선택한다.(자율적 존재)

자율적 존재가 되기 위해서는 자신이 알고있는 정보를 이용해 직접 요금을 계산해야 한다. (캡슐화)

메시지를 처리하던 중에 직접 처리할 수 없는 정보나 행동이 필요한 경우 또다른 객체에게 도움을 요청한다.

 

- 협력이 설계를 위한 문맥을 결정한다.

객체의 행동을 결정하는 것은 객체가 참여하고 있는 협력이다.

협력이 바뀌면 객체가 제공해야하는 행동 역시 바뀌어야 한다.

협력 -> 행동 -> 상태

협력이 일종의 문맥(Context)를 제공한다.

02. 책임

- 책임이란 무엇인가

책임의 구분

   - 무엇을 알고있는가?

      : 사적인 정보에 관해 아는 것

      : 관련된 객체에 관해 아는 것

      : 자신이 유도하거나 계산할 수 있는 것에 관해 아는 것

   - 무엇을 할 수 있는가?

      : 객체를 생성하거나 계산을 수행하는 등의 스스로 하는 것

      : 다른 객체의 행동을 시작시키는 것

      : 다른 객체의 활동을 제어하고 조절하는 것

책임은 객체가 수행할 수 있는 행동을 종합적이고 간략하게 서술하기 때문에

메시지보다 추상적이고 개념적으로도 더 크다.

CRC카드(Candidate, Responsibility, Collaborator): 인덱스 카드를 후보라고 생각하기 시작하면 자연스럽게 인덱스 카드의 구현에 대한 세부적인 결정은 미루고 책임과 협력에 집중할 수 있게 된다.

 

- 책임 할당

수행할 정보 전문가를 찾는 과정.

 

- 책임 주도 설계

RDD(책임 주도 설계): 협력을 설계하기 위해서는 책임에 초점을..

    - 메시지가 객체를 결정한다.

      : 객체가 최소한의 인터페이스를 가질 수 있게 된다.

      : 추상적인 인터페이스를 가질 수 있게 된다. 

    - 행동이 상태를 결정한다.

      객체의 상태가 아니라 행동이 중요하다.

03. 역할

- 역할과 협력

역할: 책임의 집합

 

- 유연하고 재사용 가능한 협력

동일한 책임을 수행하는 역할을 기반으로 두 개의 협력(AmountDiscountPolicy, PercentDiscountPolicy)을 하나로 통합할 수 있다. 중복 코드 제거가 가능해진다. => 추상화(추상 클래스 or 인터페이스)

 

- 객체 대 역할

· 책임을 수행하는 대상이 한 종류라면 간단하게 객체로 간주. 여러 종류의 객체들이 참여할 수 있다면 역할.

 

- 역할과 추상화

· 세부사항에 억눌리지 않고도 상위 수준의 정책을 쉽고 간단하게 표현할 수 있다.

· 설계를 유연하게 만들 수 있다. (역할은 슬롯과 같다.)

 

- 배우와 배역

· 역할은 객체의 페르소나. 동일한 역할을 수행하는 하나 이상의 객체들이 존재

 

+ Recent posts