자율적인 책임

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

적절한 책임이 자율적인 객체를 낳고, 자율적인 객체들이 모여 유연하고 단순한 협력을 낳는다. 따라서 협력에 참여하는 객체가 얼마나 자율적인지가 전체 애플리케이션의 품질을 결정한다.

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

왕은 모자 장수가 ‘증언하라'라는 자신의 요청에 반응해 책임을 완수할 수만 있다면 어떤 방법으로 증언하는지에 관해서는 신경을 쓰지 않는다.

방식1에서 모자 장수는 왕에게 증언할 책임은 있지만 증언을 위한 구체적인 방법이나 절차에 대해서는 최대한의 자유를 누린다. 방식2에서 모자 장수는 목격했던 장면을 떠올리고, 떠오르는 기억을 시간 순서대로 재구성하고, 말로 간결하게 표현할 책임이 있다. 여기서 문제는 이 책임들이 모자 장수가 증언하기 위해 선택할 수 있는 자유의 범위를 지나치게 제한 한다는 점이다.

방식2의 모자 장수는 책임을 수행하기 위해 자신의 의지나 판단력이 아닌 왕의 명령에 의존할 수밖에 없다. 결과적으로 두 번째 모자 장수는 자율적으로 책임을 수행할 수 없다.

객체가 자율적이기 위해서는 객체에게 할당되는 책임의 수준이 자율적이어야 한다.

⇒ 방식2는 증언 방법 변경 시 수정이 어렵다.

너무 추상적인 책임

추상적이고 포괄적인 책임은 협력을 좀 더 다양한 환경에서 재사용할 수 있도록 유연성이라는 축복을 내려준다. 그러나 책임은 협력에 참여하는 의도를 명확하게 설명할 수 있는 수준 안에서 추상적이어야 한다. ‘증언하라' 라는 책임이 훌륭한 책임인 이유는 모자 장수의 자율성을 보장할 수 있을 정도로 충분히 추상적인 동시에 협력의 의도를 뚜렷하게 표현할 수 있을 정도로 충분히 구체적이기 때문이다.

어떤 책임이 자율적인지를 판단하는 기준은 문맥에 따라 다르다. 성급한 일반화의 오류를 피하고 현재의 문맥 에 가장 적합한 책임을 선택할 수 있어야 한다.

’어떻게'가 아니라 ‘무엇’을

자율적인 책임의 특징은 객체가 ‘어떻게(how)’ 해야 하는가가 아니라 ‘무엇(what)’ 을 해야 하는가를 설명한다는 것이다.

메시지와 메서드

메시지

왕이 모자 장수에게 전송하는 메시지를 가리키는 ‘증언하라'라는 부분을 메시지 이름이라고 한다. 메시지를 전송할 때 추가적인 정보가 필요한 경우 메시지의 인자를 통해 추가 정보를 제공할 수 있다. 수신자는 메시지를 처리하기 위해 메시지에 실려 있는 인자를 사용할 수 있다.