어떤 객체도 섬이 아니다.
우리 모두를 합친 것보다 더 현명한 사람은 없다.
요청과 응답으로 연결되는 객체들의 네트워크
객체가 자신에게 할당된 책임을 혼자서 수행하기 어렵다면 문제를 해결하는데 필요한 지식을 알고 있거나 도움을 줄 수 있는 다른 객체에게 도움을 요청한다
요청을 받은 객체는 일을 처리한 후 요청한 사람에게 필요한 지식이나 서비스를 제공하는 것으로 응답하며 협력이 이루어진다
-> 요청과 응답으로 시작되는 협력!!
(요청을 받은 객체도 혼자서 일을 처리하기 어렵다면 또 다른 적절한 객체에게 도움을 요청한다)
-> 협력은 전체적으로 다수의 요청과 응답의 연쇄적인 흐름으로 구성된다.
객체에 의해 정의되는 응집도 있는 행위의 집합으로 요청을 처리하기 위해 객체가 수행하는 행동
객체지향의 세계에서는 어떤 객체가 어떤 요청에 대해 대답해 줄 수 있거나, 적절한 행동을 할 의무가 있는 경우 해당 객체가 책임을 가진다고 말한다..
책임의 두가지 분류
⭐️ 적절한 객체에게 적절한 책임을 할당하는 것이 객체지향의 품질을 결정
적절한 책임?
:객체의 자율성을 보장할 수 있을 정도로 충분히 추상적이면서 협력의 의도를 뚜렷하게 표현할 수 있을정도로 충분히 구체적
ex) 재판에서 판사가 증인에게 요청을 하는 상황
설명하라
: 객체가 무엇을 설명해야 하는지 너무 포괄적임
목격했던 장면을 떠올리고 떠오르는 기억을 시간 순서대로 재구성해서 말로 간결하게 표현하라
: 판사는 어떤 방식이든 증언만 할 수 있다면 충분하므로 증인의 자율성을 침해함
증언하라
: 증인의 자율성을 충분히 보장하면서 증인이 해야할 일을 명확하게 지시하는 적절한 책임
-> 어떻게가 아니라 무엇을 해야하는지를 설명하는 책임이 자율적인 책임!
객체의 책임은 다른 객체로부터 요청을 받았을 때 생성된다.
한 객체가 다른 객체에게 요청을 할 수 있는 방법은 오직 '메시지 전송'뿐이다.
이때 메시지 전송을 하는 객체: 송신자
메시지를 받아 요청을 처리하는 객체: 수신자
책임과 메시지의 수준이 항상 같지는 않다.
(책임은 여러개의 메시지로 분할되어 요청되는 것이 일반적!)
결국 메시지는 책임을 의미한다..!
메서드: 메시지를 처리하기 위해 내부적으로 선택하는 방법
두 객체가 마주하는 부분에서 서로 상호작용 할 수 있도록 이어주는 방법이나 장치
인터페이스의 특징
객체 인터페이스는 객체가 수신할 수 있는 메세지(유일한 상호작용 방법)의 목록!
외부에서 접근하는 인터페이스: 공용 인터페이스
객체의 내부 구조와 작동방식: 구현(사적 인터페이스+행동, 상태)
사적 인터페이스: 내부에서 접근하는 인터페이스
⭐️인터페이스와 구현의 분리 원칙
객체의 자율성을 위해 캡슐화를 통해 내부와 외부를 분리한다.
캡슐화: 구현을 외부로부터 감추는 것
캡슐화의 두가지 관점
내부와 외부를 분리함으로써 단순하고 유연하고 변경이 쉬운 설계가능
협력 내에서 다른 객체로 대체할 수 있음을 나타내는 일종의 표식
재사용 가능하고 유연한 객체지향 설계를 위한 구성요소
협력의 주체를 제외한 과정이 유사해서 협력 자체를 재사용하고 싶다..!
-> 협력의 주체를 수행하는 객체 자체가 아닌 수행하는 역할로 보자!
ex) 여왕이 토끼에게 목격자를 불러오라는 협력 -> "판사"가 "증인"에게 목격자를 불러오라는 협력
목격자를 불러오라는 다른 협력 상황이나 목격자가 여러번 변경 될 때 협력을 재사용할 수 있다.
핵심은 대체가능성으로 동일한 책임을 수행 할 수 있어야 한다!