자율적인 책임
설계의 품질을 좌우하는 책임
- 객체지향 공동체를 구성하는 기본 단위는
자율적
인 객체임.
- 애플리케이션 기능을 구현하기 위해 협력하고, 협력 과정에서 맡은 바 책임을 다하기 위해 자율적으로 판단하고 행동.
- 자율적인 객체란 스스로 정한 원칙에 따라 판단하고 스스로의 의지를 기반으로 행동하는 객체임.
- 타인이 정한 규칙이나 명령에 따라 판단하고 행동하는 것은 자율적인 객체가 아님.
- 적절한 책임이 자율적인 객체를 낳고, 자율적인 객체들이 모여 유연하고 단순한 협력을 낳음.
- 협력에 참여하는 객체가 얼마나 자율적인지가 전체 애플리케이션의 품질을 결정함.
- 상세한 수준의 책임들은 객체의 자율성을 제한한다.
- 협력 의도를 명확하게 표현하지 못할 정도로 추상적인 것 역시 문제임.
- 책임은 협력에 참여하는 의도를 명확하게 설명할 수 있는 수준에서 추상적이어야 함.
‘어떻게’가 아니라 ‘무엇’을
- 자율적인 책임의 특징은 객체가 어떻게(how)가 아니라 무엇(what)을 해야하는가를 설명하는 것.
- ex) 증언하라 → 협력을 위해 무엇을 해야하는진 알지만, 어떻게 해야하는지에 대해서는 언급이 없음.
- 증언할 방법은 모자 장수가 자율적으로 선택할 수 있음.
책임을 자극하는 메시지
- 책임이라는 말 속에는 어떤 행동을 수행한다는 의미가 포함돼 있다.
- 객체가 자신에게 할당된 책임을 수행하도록 만드는 것은 외부에서 전달되는 요청임.
메시지와 메서드
메시지
- 하나의 객체는 메시지를 전송함으로써 다른 객체에 접근함.
- ex) 왕은 모자장수에게 “증언하라”라는 메시지를 전송함.
- 메시지를 전송할 때 추가적인 정보가 필요한 경우 메시지의 인자(argument)를 통해 추가 정보를 제공할 수 있음.
- 수신자는 메시지를 처리하기 위해 인자를 사용할 수 있음.
- 수신자, 메시지 이름, 인자 순서대로 나열하면 메시지 전송이 됨.
메서드
- 메시지를 처리하기 위한 방법
- ex) “증언하라”라는 메시지를 처리하기 위해 내부적으로 선택하는 증언방법