우리 모두를 합친 것보다 더 현명한 사람은 없다. - Ken Blanchard
협력에 참여하는 객체들은 목표를 달성하는 데 필요한 책임을 수행.
책임은 객체에 의해 정의되는 응집도 있는 행위의 집합. 즉, 객체의 책임은 '객체가 무엇을 알고 있는가(knowing)'와 '무엇을 할 수 있는가(doing)'로 구성된다.
larman은 객체의 책임을 위 2가지 범주로 자세하게 분류한다.
하는 것(doing)
객체를 생성하거나 계산 하는 등의 스스로 하는 것
다른 객체의 행동을 시작시키는 것
다른 객체의 활동을 제어하고 조절하는 것
아는 것(knowing)
개인적인 정보에 관해 아는 것
관련된 객체에 관해 아는 것
자신이 유도하거나 계산할 수 있는 것에 관해 아는 것
ex) 변호사는 목격자가 A라는 사실을 알고 있으며, 동시에 A가 증인석에 입장하도록 요청한다.
첫번째 책임은 관련된 객체에 대해 아는 것에 해당하고 두번째 책임은 다른 객체의 행동을 시작시키는 것에 해당
-> 두 가지 종류의 책임을 모두 수행하고 있다.
책임은 객체지향 설계의 품질을 결정하는 가장 중요한 요소
객체지향 설계의 예술은 적절한 객체에게 적절한 책임을 할당하는 데 있다
객체의 책임을 이야기 할 때는 일반적으로 외부에서 접근 가능한 공용 서비스의 관점에서 이야기한다.
즉, 책임은 외부에 제공해 줄 수 있는 정보(knowing)와 외부에 제공해 줄 수 있는 서비스(doing)의 목록.
따라서 책임은 객체의 공용 인터페이스(public interface)를 구성
정리해보면, 어떤 클래스가 필요하고 어떤 메서드를 포함해야 하는지를 결정하는 것은 어떤 객체가 어떤 책임을 수행하고 어떤 객체로부터 메시지를 수신할 것인지를 결정하는 것으로부터 시작된다.

결론적으로 역할은 객체지향 설계의 단순성(simplicity), 유연성(flexibility), 재사용성(reusability)을 뒷받침하는 핵심 개념.
요약하면 역할의 대체 가능성은 행위 호환성을 의미하고, 행위 호환성은 동일한 책임의 수행을 의미.
시스템이 사용자에게 제공해야 하는 기능인 시스템 책임을 파악한다.
시스템 책임을 더 작은 책임으로 분할한다.
분할된 책임을 수행할 수 있는 적절한 객체 또는 역할을 찾아 책임을 할당한다.
객체가 책임을 수행하는 중에 다른 객체의 도움이 필요한 경우 이를 책임일 적절한 객체 또는 역할을 찾는다.
해당 객체 또는 역할에게 책임을 할당함으로써 두 객체가 협력하게 한다.
디자인 패턴은 책임-주도 설계의 결과물인 동시에 지름길.
객체지향의 두번째 선입견
객체지향이 클래스와 클래스 간의 관계를 표현하는 시스템에 정적인 측면에 중점을 둔다는 것이다.