의도는 "메시징"이다. 훌륭하고 성장 가능한 시스템을 만들기 위한 핵심은 모듈 내부의 속성과 행동이 어떤가보다는 모듈이 어떻게 커뮤니케이션하는가에 달려있다. -앨런 케이
자율적인 책임
설계의 품질을 좌우하는 책임
자율적인 객체란 스스로 정한 원칙에 따라 판단하고 스스로의 의지를 기반으로 행동하는 객체
적절한 책임이 자율적인 객체를 낳고, 자율적인 객체들이 모여 유연하고 단순한 협력을 낳는다.
협력에 참여하는 객체가 얼마나 자율적인지에 따라 애플리케이션 품질이 결정된다.
너무 추상적인 책임
추상적인 것도 정도가 있다. 협력의 의도를 명확하게 표현하지 못할 정도로 추상적인 것은 문제다.
추상적인 책임은 재사용성과 유연성을 가진다. 다만 협력에 참여하는 의도는 명확하게 설명할 수 있는 수준이야 한다.
'어떻게'가 아니라 '무엇'을
책임을 어떻게는 질지가 중요한게 아니라. 책임이 무엇인지가 중요하다.
어떻게는 구체적인 방법이라 객체의 행동에 자율성을 제한한다.
다형성을 떠올려보자. 무엇을 제공해주는 지가 중요하지 그 방법 따위는 중요치 않다.
이는 결국 결합도와도 연결된다.
책임을 자극하는 메시지
객체가 자신에게 할당된 책임을 수행하도록 만드는 것은 외부에서 전달되는 요청이다.
사실 객체 간 소통은 요청뿐이다.
요청=메시지
메시지와 메서드
메시지
메시지를 전송함으로써 다른 객체에 접근한다.
메시지는 이름과 인자 두 부분으로 구성(메서드나 함수)
메시지 전송은 수신자, 메시지 이름, 인자로 구성됨
메시지 수신을 통해서만 자신의 책임을 수행할 수 있다.
메시지는 객체들이 서로 협력하기 위해 사용할 수 있는 유일한 의사소통 수단이다. 객체가 메시지를 수신할 수 있다는 것은 객체가 메시지에 해당하는 책임을 수행할 수 있다는 것을 의미한다. 객체가 유일하게 이해할 수 있는 의사소통 수단은 메시지뿐이며 객체는 메시지를 처리하기 위한 방법을 자율적으로 선택할 수 있다. 외부 객체는 메시지에 관해서만 볼 수 있고 객체 내부는 볼 수 없기 때문에 자연스럽게 객체의 외부와 내부가 분리된다.
메서드
메시지 수신을 처리하기 위해 내부적으로 선택하는 방법을 메서드라 한다.
다형성
서로 다른 유형의 객체가 동일한 메시지에 대해 서로 다르게 반응하는 것
무엇이 실행될 지는 명시했지만 어떻게 실행할 것인지는 수신자가 결정한다.
다형성을 만족시킨다는 것은 객체들이 동일한 책임을 공유한다는 것
송신자의 관점에서 다형성은 수신자들을 구분할 필요없다. 저 마다 방법이 다를지라도 다 동일한 책임을 수행하기 때문이다.
더 나아가 수신자가 무엇인지 관심도 없다. 역할만 알면된다.(대체 가능성)
따라서 유연하고 재사용성이 높아진다.
송신자-수신자 사이 객체 타입에 대한 결합도를 메시지에 대한 결합도를 낮춤으로써 달성한다.
유연하고 확장 가능하고 재사용성이 높은 협력의 의미
메시지 송신자는 수신자가 메시지를 이해할 수 있다는 사실만 알고 있는 상태에서 협력에 참여한다.
매우 작은 정보만 알고 있더라도 상호 협력이 된다는 것은 설계의 품질에 큰 영향을 미친다.
첫째, 협력이 유연해진다. 수신자가 대체 되더라도 상관이 없고, 송신자는 변경 사실을 알 수 조차 없다.
둘째, 협력이 수행되는 방식을 확장할 수 있다. 송신자에게 아무런 영향 없이 수신자를 교체할 수 있기 때문에 세부 수행 방식을 쉽게 수정할 수 있다.
셋째, 협력이 수행되는 방식을 재사용할 수 있다. 수신자가 교체가 가능하기 때문에 문맥에 맞게 재사용할 수 있다.
송신자와 수신자를 약하게 연결하는 메시지
메시지는 송신자와 수신자 사이의 결합도를 낮춤으로써 설계를 유연하고, 확장 가능하고, 재사용 가능하게 만든다.
송신자의 관점에서 송신자는 메시지만 바라본다. 수신자의 정확한 타입을 모르더라도 상관없다. 단지 잘 처리해 줄 것이라는 사실만 알면 그만이다.
수신자는 메시지를 처리할 방법을 자유롭게 선택하며, 구체적인 방법은 송신자에게 노출하지 안는다.
송신자와 수신자 사이 약하게 연결하는 메시지는 낮은 결합도를 보장한다.
이에 따라 유연하고, 대체가능하며, 재사용 가능하며, 확장까지 가능하다.
'IT책, 강의 > 객체지향의 사실과 오해(역할, 책임, 협력 관점에서 본 객체지향)' 카테고리의 다른 글
06 객체 지도 - 1 (1) | 2022.12.24 |
---|---|
05 책임과 메시지 -2 (0) | 2022.12.22 |
04 역할, 책임, 협력 - 2 (0) | 2022.12.16 |
04 역할, 책임, 협력 - 1 (0) | 2022.12.13 |
03 타입과 추상화 - 2 (0) | 2022.12.06 |