<객체지향의 사실과 오해, 조영호 지음 / 위키북스> 4장을 읽고 정리한 내용입니다.

협력

인간의 행동을 예측하기 위해서 협력이라는 문맥이 고려되어야 한다.
협력이라는 문맥에 따라서 인간은 합리적으로 행동할 때도 있고, 때로는 비합리적으로 행동하기도 한다.

객체도 마찬가지이다. 객체지향에서 강조하는 객체의 행동도 결국 협력이라는 문맥 하에 고려되어야 한다.
협력에 따라서 객체의 행동이 달라질 수 있기 때문이다.

협력이란 무엇일까?
협력은 객체간에 메시지를 통해 요청과 응답을 주고 받으며 각자 맡은 역할과 책임을 다하여 공동의 목표를 달성하는 것이다.

책임

객체지향에서 책임이란 어떠한 요청을 수신받아서 응답할 수 있거나, 요청에 따른 적절한 행동을 할 의무가 있음을 의미한다.
책임은 크게 아는 것과 하는 것의 두 가지로 분류할 수 있다. (p.115)

  • 아는 것(knowing)
    • 개인적인 정보에 관해 아는 것
    • 관련된 객체에 대해 아는 것
    • 자신이 유도하거나 계산할 수 있는 것에 관해 아는 것
  • 하는 것(doing)
    • 객체를 생성하거나 계산을 하는 등의 스스로 하는 것
    • 다른 객체의 행동을 시작시키는 것
    • 다른 객체의 활동을 제어하고 조절하는 것

책임과 메시지

앞서 협력은 객체들이 메시지를 주고 받으며 각자 맡은 역할과 책임을 이행하는 것이라 했다.
책임과 메시지는 어떠한 관계가 있을까?

메시지를 수신 받은 객체는 어떠한 행동을 할지 결정할 수 있다. 따라서, 메시지는 객체들이 책임을 다할 수 있도록 연결해주는 연결점과 같다.
다시 말해 책임은 협력을 위해 객체가 수행해야 할 행동을 상위 수준에서 서술한 것이고, 메시지는 수신하는 객체와 발송하는 객체간의 상호 협력이라는 문맥을 강조하는 개념이라 할 수 있다.
대개 하나의 책임이 여러 메시지로 분할된다.

역할

객체지향에서 역할이란 협력 관계에서 어떤 객체가 다른 객체로 대체될 수 있음을 의미한다.
예를 들어, 앨리스 이야기에서 왕이 재판을 하다가 머리가 아프다며 여왕에게 대신 재판을 진행해줄 것을 요청했다.
이는 파이를 훔친 인물을 찾기 위한 재판이라는 공동의 목표, 협력 안에서 특별히 왕이라는 인물만 재판을 할 수 있는 것이 아니라, 재판을 할 수 있는 인물이라면 판사 역할을 수행할 수 있음을 의미한다.
여기에서 아래와 같은 사실을 추론할 수 있다.

  • 역할을 통해 협력을 추상화할 수 있다.
  • 역할을 제대로 수행하기 위해서는 동일한 메시지를 수신하고, 처리할 수 있어야 한다. 즉, 동일한 책임을 갖는 객체는 같은 타입, 같은 역할이라 할 수 있다.

객체의 모양을 결정하는 협력

앞서 이야기한 것처럼 객체의 행동을 예측하기 위해서는 해당 객체가 어떠한 문맥, 즉 어떠한 협력 관계 안에서 사용되는지를 먼저 고려해야 한다.
따라서, 협력을 먼저 설계하고, 협력 관계에 적절한 객체의 행동을 구성해야 한다.

댓글남기기