객체지향 프로그래밍(3)

1 minute read

책임 할당하기

책임 할당 과정은 일종의 트레이드오프 활동이다.

즉 모든 케이스를 만족시킬순 없으니 현 코드의 상황과 비지니스의 요구사황에 따라 적절하게 선택해야된다. (인생은 선택의 연속이라고 누가 그러던데…)

그럼 정답은 없고 주어진 상황에서 어떤 선택을 해야할지 선택의 기준을 알아보자

책임 주도 설계를 향해

객체의 행동(책임)을 먼저 결정

객체에게 가장 중요한것은 외부에 제공하는 행동이다. 행동이라는 것은 어떠한 객체를 사용하는 클라이언트 관점에서 해당 객체가 수행해줄 수 있는 행위, 기능, 등을 말한다. 이런 행위, 기능을 객체가 갖고 있는 책임이라고 말할 수 있다. 그렇다면 객체의 책임을 어떤 판단 기준을 갖고 해야되는가?

협력이라는 문맥안에서 책임을 결정

책임은 객체 입장이 아니라 객체가 참여하는 협력에 적합해야된다.

우리가 작성하는 어플리케이션은 수많은 객채들의 조합으로 만들어진다. 여기서 각각의 객체들이 서로 어플리케이션의 복잡도를 나눠 갖고 서로 협력하게 된다. 이때 어플리케이션의 동작을 위해 각 객체가 적절하게 협력할 수 있도록 책임을 나눠야 한다.

심지어 객체 단일로 보았을때 그 책임이 어색하더라도 협력에 어울린다면 그 선택이 옳을 가능성이 높다. 협력의 시작은 메시지를 전송자로 부터 시작이다. 클라이언트의 의도에 적합한 책임을 할당해야된다.

메시지를 먼저 결정한 후 메시지를 처리할 객체를 결정하도록한다. 메시지가 있기때문에 그 메시지를 처리할 객체가 필요하기 때문이다.

메시지를 보내는 객체는 호출한쪽의 의도에 맞는 메시지를 보낼 책임을 갖고, 어떤 객체가 수신할지는 알지 못한다.

메시지를 받는 객체는 메시지를 처리할 책임을 갖는다.

책임 주도 설계

자 이젠 책임을 할당하기 전에 협력 관계를 정리하는 것이 필요하다 라는 생각이 들어야한다. 협력 관계 파악은 아래 5가지 내용을 참고하여 생각해보면 도움이 된다.

  1. 시스템이 사용자에게 제공해야 하는 기능인 시스템 책임을 파악
  2. 시스템 책임을 더 작은 책임으로 분할
  3. 분할된 책임을 수행할 수 있는 적절한 객체 또는 역할을 찾아 책임을 할당
  4. 객체가 책임을 수행하는 도중 다른 객체의 도움이 필요한 경우 이를 책임질 적절한 객체 또는 역할을 찾는다.
  5. 해당 객체 또는 역할에게 책임을 할당함으로써 두 객체가 협력하게 한다.

책임을 결정한 후에 책임을 수행할 객체를 결정

객체 내부 상태는 객체들간의 책임이 어느정도 정리된 후에 결정하도록한다.

다음은 객체 책임 할당을 패턴으로 정리한 GRASP 패턴에 대해 알아보자

Updated: