자율적인 책임

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

객체지향 설계에서 가장 중요한 출발점은 책임이다. 적절한 책임자율적인 객체를 만들고, 이러한 객체들이 모여 유연하고 단순한 협력을 이끌어낸다.

객체지향 세계의 기본 단위는 '자율적인 객체'다. 여기서 '자율성'이란 사전적으로 **"자기 스스로의 원칙에 따라 움직이는 성질"**을 의미한다.

즉, 자율적인 객체란 스스로 정한 원칙에 따라 판단하고, 스스로의 의지에 따라 행동하는 객체다.

하지만 객체는 아무 이유 없이 행동하지 않는다. 객체가 어떤 행동을 하는 유일한 이유는 다른 객체로부터 요청을 받았기 때문이다.

그리고 이때, 요청을 받은 객체가 수행해야 하는 행동을 우리는 책임(responsibility)이라 부른다. 결국, 적절한 책임을 객체에 부여함으로써 자율성을 확보할 수 있고, 이러한 객체들 사이에 유연한 협력 구조가 자연스럽게 형성된다.


자신의 의지로 증언할 수 있는 자유

앞서 4장에서 소개된 재판장의 장면을 다시 떠올려보자.

이때 왕은 증인에게 단지 "증언하라"는 메시지만 보낸다. 증인은 이 요청에 대해, 자신의 방식으로 증언이라는 책임을 이행하면 된다.

하지만 만약 왕이 너무 구체적으로 요청한다면 어떨까? 예를 들어, "기억을 떠올린 다음, 시간 순으로 정리해서, 말로 설명하라"고 요청한다면?

이런 식의 지시는 객체의 자율성을 심각하게 제한하게 된다.

예를 들어, 모자장수는 기억을 떠올리기 어려워 메모를 참고할 수도 있고, 말주변이 없어 문서를 대신 제출할 수도 있다. 하지만 너무 구체적인 지시는 그의 선택권을 제한하고 유연성을 빼앗아버린다.

즉, 너무 구체적인 책임은 객체의 자율성을 해친다. 객체가 자율적으로 협력하려면, 책임 역시 자율성을 담보할 수 있는 수준으로 주어져야 한다.


너무 추상적인 책임도 문제다

그렇다고 반대로, 너무 추상적인 책임을 부여하면 또 다른 문제가 생긴다.

"증언하라" 대신 "설명하라"라는 메시지를 보낸다면 어떨까? 모자장수는 요청받은 대로 설명을 하겠지만, 그 내용이 재판이라는 맥락에 맞는지 보장은 없다.

즉, 책임이 너무 포괄적이면 협력의 의도가 흐려질 수 있다.

책임이 충분히 추상적이어야 다양한 환경에서 재사용 가능하지만, 동시에 그 책임이 어떤 맥락에서 수행되어야 하는지도 명확해야 한다.


올바른 객체의 책임이란?

객체에 부여되는 책임은 다음 두 조건을 동시에 만족해야 한다:

  1. 객체의 자율성을 보장할 수 있을 정도로 충분히 추상적일 것

  2. 협력의 의도와 맥락을 분명하게 드러낼 수 있을 정도로 충분히 구체적일 것


'어떻게'가 아닌 '무엇'을

객체에게 책임을 부여할 때는 "어떻게(How)"가 아닌 "무엇(What)"을 해야 하는지에 집중해야 한다.

예를 들어, "기억을 떠올려라", "시간 순으로 정리하라"는 How에 해당하는 지시다. 이런 방식은 객체가 책임을 이행하기 위한 여러 선택지를 제한해버린다.

반면, "증언하라"는 What에 해당하는 책임이며, 객체가 자신의 방식대로 책임을 수행할 수 있는 자율성을 보장해준다.


책임을 유도하는 메시지

객체지향에서 책임은 스스로 수행되지 않는다. 객체는 외부로부터 메시지를 수신함으로써 그 책임을 수행하게 된다.

즉, 메시지는 객체가 책임을 이행하게 만드는 유일한 수단이다. 결국, 설계자는 객체의 자율성과 협력을 고려해 적절한 메시지와 책임을 설계해야 한다.

Last updated