
객체지향에서 중요한 것은 ‘협력’
요청요청요청응답 = 토끼의 왕의 요청에 대한 응답요청응답누군가 ⇒ 왕 : 재판하라
→ 왕은 재판을 수행할 의무가 있음 & 재판에 필요한 지식이 있음
왕 ⇒ 토끼 : 목격자 불러와라
→ 토끼는 목격자에 대해 알고 있음 & 목격자를 부를 의무가 있음
왕 ⇒ 모자 장수 : 증언하라
→ 모자 장수는 증언할 내용을 알고 있음 & 증언할 의무가 있음
책임 : 객체에 의해 정의되는 응집도 있는 행위의 집합객체가 알아야 할는 정보와 객체가 수행할 수 있는 행위에 대해 개략적으로 서술한 문장책임의 구성
객체가 무엇을 알고 있는가 ( knowing )
무엇을 할 수 있는가 ( doing )
앨리스의 이야기
왕
다른 객체들의 활동을 제어하고 조율”토끼
관련된 객체에 대해 아는 것”다른 객체의 행동을 시작시키는 것”모자 장수
자신이 유도하거나 계산할 수 있는 것에 관해 아는 것”객체를 생성하거나 계산을 하는 등의 스스로 하는 것”책임은 객체의 외부에 제공해 줄 수 있는 정보와 외부에 제공해 줄 수 있는 서비스의 모음공용 인터페이스A객체(송신자) ⇒ B객체(수신자): 요청 전송
→ 요청 은 수신자의 책임이 수행되게 함
→ 이런 과정을 메시지 전송 이라 함
책임의 수준 ≠ 메시지의 수준
→ 책임은 객체의 협력을 위해 수행해야 하는 것들을 개략적으로 서술한 것
→ 메시지는 이 책임을 필요한 여러 메시지로 분할해서 진행
객체지향 설계의 시작점
협력에 참여하기 위해
어떤 객체가 어떤책임을 수행해야 하고
어떤 객체로부터메시지를 수신할 것인지를 결정하는 것
책임의 집합 = 협력에서 해당 객체가 수행하는 역할증인 이라는 역할로 포괄한다면, 단일 협력 상황으로 추상화 가능
판사에게 재판을 요청판사는 토끼에게 증인을 부를 것을 요청판사의 요청을 받은 토끼는 증인에게 증인석으로 입장할 것을 요청증인은 증인석에 입장하여 토끼의 요청에 응답증인이 증인석에 입장함으로써, 토끼에 대한 판사의 요청에 대한 응답판사는 증인에게 증언할 것을 요청증인은 자신이 알고 있는 내용을 증언함으로써 판사의 요청에 응답메시지가 책임을 의미함
→ 동일한 역할 수행 가능 = 동일한 책임의 집합 수행 가능
→ 동일한 역할 수행 가능 = 동일한 메시지를 수신할 수 있음
→ 동일한 역할 수행할 수 있는 객체들끼리 묶어서 추상화 가능
추상화를 한다면 ( 역할을 부여한다면 )
→ 인지 과부화 줄일 수 있음 = 단순성, Simplicity
→ 협력이 유연해짐 = 유연성, Flexibility
→ 재사용성이 높아짐 = 재사용성, Reusability
역할은 여러 객체가 협력에 참여 가능하게 하여 협력을 추상화 할 수 있게 함협력의 추상화는 협력의 개수를 줄이고, 협력에 참여하는 객체를 추상적인 역할로 대체역할은 협력 안에서 구체적 객체로 대체 가능
→ 동일 역할이면, 다른 객체로 대체 가능
→ 동일 역할(동일한 책임의 집합)을 모두 수행할 수 있어야 함
객체는 역할에 주어진 책임 이외에도 다른 책임을 수행할 수 있음
→ 역할이 암시하는 것 보다 더 많은 책임 가질 수 있음
→ 역할-객체 관계 = 일반화-특수화 관계
객체에 대한 선입견
협력에 참여하기 위해객체의 행동(책임)객체를 설계하기 전에 올바른 협력을 설계해야 함
→ 설계에 참여하는 객체들이 주고받을 요청과 응답의 흐름을 설계해야 함
협력에 필요한 책임을 얼마나 합리적, 적절하게 설계했는지가 설계의 품질을 결정
협력을 가장 먼저 정의하자
책임-주도 설계
→ 책임들을 식별하고 책임을 할당
디자인 패턴
→ 반복적으로 사용하는 해결 방법을 정의해 둔 템플릿
테스트-주도 개발
→ 테스트를 먼저 작성하고 통과하는 것들만 코드로 작성
객체의 책임을 중심으로 시스템을 구축하는 방법
→ 시스템의 기능은 더 작은 책임으로 분할
→ 각 책임은 특정 객체에 할당
→ 특정 책임을 여러 객체가 수행할 수 있다면, 추상화
시스템의 책임 ⇒ 객체의 책임으로 할당
→ 객체가 책임을 수행할 때, 협력자를 찾아 다른 책임을 할당
책임-주도 설계 정리
- 시스템이 사용자에게 제공해야 하는 시스템 책임을 파악
- 시스템 책임을 더 작은 책임으로 분할
- 분할된 책임을 수행할 수 있는 적절한 객체 또는 역할을 찾아 할당
- 객체가 책임을 수행하는 도중 도움이 필요하면 또 이 도움이라는 책임을 질 다른 객체를 찾음
- 해당 객체에게 책임을 할당하고, 협력을 이룸