Search
📖

[객체 지향의 사실과 오해] 5장. 책임과 메세지

자율적인 책임

설계의 품질을 좌우하는 책임

객체지향 공동체를 구성하는 기본 단위는 '자율적'인 객체
자율적인 객체: 스스로의 의지와 판단에 따라 각자 맡은 책임을 수행하는 객체
협력에 참여하는 객체가 얼마나 자율적인지가 전체 애플리케이션의 품질을 결정한다

자신의 의지에 따라 증언할 수 있는 자유

객체지향 세계는 자율적인 객체들의 공동체.
객체가 자율적이기 위해서는 객체에게 할당되는 책임의 수준 역시 자율적이어야 한다.

너무 추상적인 책임

책임이 수행 방법을 제한할 정도로 구체적인 것도 문제 ex) 증언을 시간 순서대로 구성하라
협력의 의도를 명확하게 표현하지 못할 정도로 추상적인 것도 문제 ex) 설명하라
추상적이고 포괄적인 책임은 협력을 좀 더 다양한 환경에서 재사용할 수 있도록 유연성 부여
책임은 협력에 참여하는 의도를 명확하게 설명할 수 있는 수준 안에서 추상적이여야 한다
성급한 일반화의 오류를 피하고 현재의 문맥에 가장 적합한 책임을 선택할 수 있는 날카로운 안목이 필요하다

'어떻게`가 아니라 '무엇'을

자율적인 책임은 객체가 어떻게 하는 것이 아닌 무엇 을 해야 하는가를 설명

책임을 자극하는 메시지

메시지는 책임을 수행하도록 만드는 외부에서 전달되는 요청
다른 객체에게 접근할 수 있는 유일한 방법

메시지와 메서드

메시지

하나의 객체는 메시지를 전송함으로써 다른 객체에 접근
메시지 이름 : 왕이 모자 장수에게 전송하는 메시지를 가리키는 '증언하라' 부분
인자 : 메시지를 보낼 때 필요한 추가정보 ex) 특정한 장소와 시간에 목격한 것을 증언하라
메시지 : 메시지 이름 + 인자 ex)증언하라(어제,왕국)
메시지 전송 : 수신자 + 메시지 ex) 모자장수.증언하라(어제,왕국)
메시지 수신받은 객체는 자신이 해당 메시지를 처리할 수 있는지 확인한다.
메시지를 처리할 수 있다는 것은 그 책임을 가지고 있다를 의미
메시지의 개념은 책임의 개념과 연결
송신자는 메시지 전송을 통해 다른 객체의 책임을 요청
수신자는 메시지 수신을 통해 책임을 수행
객체는 메시지를 처리하는 방법을 자유롭게 수행할 수 있다.
메시지 송신자와는 수신자의 메시지를 제외한 어떤 것도 모른다.
객체가 제공하는 메시지는 외부의 다른 객체가 볼 수 있는 공개된 영역(public)
메시지를 처리하기 위해 책임을 수행하는 방법은 (private)
메시지는 객체들이 서로 협력하기 위해 사용할 수 있는 유일한 의사소통 수단 메시지를 수신할 수 있다는 것은 객체가 메시지에 해당하는 책임을 수행 할 수 있다.

메서드

메시지를 처리하기 위해 내부적으로 선택하는 방법
객체지향 프로그래밍 언어에서 메서드는 클래스 안에 포함된 함수 또는 프로시저를 통해 구현
메시지는 어떻게 수행 될 것인지는 명시하지 않고 오퍼레이션을 통해 무엇이 실행되기를 바라는지만 명시한다.
메시지를 수신한 객체가 실행 시간에 메서드를 선택할 수 있다는 것은 객체지향 프로그래밍 언어에 핵심적인 특징

다형성

서로 다른 유형의 객체가 동일한 메시지에 대해 서로 다르게 반응하는 것
서로 다른 타입에 속하는 객체들이 동일한 메시지를 수신할 경우 서로 다른 메서드를 이용해 메시지를 처리할 수 있는 메커니즘
1(메시지) : N(메서드)
서로 다른 객체들이 다형성을 만족시킨다는 것은 객체들이 동일한 책임을 공유하는 것을 의미
송신자의 입장에서 다형성을 가진 객체들을 구별할 필요가 없다.
왕의 입장에서 '증언하라'라는 메세지를 이해할 수 있는 '증인'이라는 객체만 있으면 된다.
→ 다형성은 수신자의 종류를 캡슐화 한다.
동일한 역할을 수행 할 수 있는 객체들 사이의 대체가능성을 의미
다형성은 송신자와 수신자 간의 객체 타입에 대한 결합도를 메시지에 대한 결합도로 낮춤으로써 달성된다. 다형성을 사용하면 메시지를 이해할 수 있는 어떤 객체와도 협력할 수 있는 유연하고 확장가능한 구조를 만들 수 있다.