객체지향 프로그래밍(3)
책임 할당하기
책임 할당 과정은 일종의 트레이드오프 활동이다.
즉 모든 케이스를 만족시킬순 없으니 현 코드의 상황과 비지니스의 요구사황에 따라 적절하게 선택해야된다. (인생은 선택의 연속이라고 누가 그러던데…)
그럼 정답은 없고 주어진 상황에서 어떤 선택을 해야할지 선택의 기준
을 알아보자
책임 주도 설계를 향해
객체의 행동(책임)을 먼저 결정
객체에게 가장 중요한것은 외부에 제공하는 행동이다. 행동이라는 것은 어떠한 객체를 사용하는 클라이언트 관점에서 해당 객체가 수행해줄 수 있는 행위, 기능, 등을 말한다. 이런 행위, 기능을 객체가 갖고 있는 책임이라고 말할 수 있다. 그렇다면 객체의 책임을 어떤 판단 기준을 갖고 해야되는가?
협력이라는 문맥안에서 책임을 결정
책임은 객체 입장이 아니라 객체가 참여하는 협력
에 적합해야된다.
우리가 작성하는 어플리케이션은 수많은 객채들의 조합으로 만들어진다. 여기서 각각의 객체들이 서로 어플리케이션의 복잡도를 나눠 갖고 서로 협력하게 된다. 이때 어플리케이션의 동작을 위해 각 객체가 적절하게 협력할 수 있도록 책임을 나눠야 한다.
심지어 객체 단일로 보았을때 그 책임이 어색하더라도 협력
에 어울린다면 그 선택이 옳을 가능성이 높다.
협력의 시작은 메시지를 전송자로 부터 시작이다. 클라이언트의 의도에 적합한 책임을 할당해야된다.
메시지를 먼저 결정한 후 메시지를 처리할 객체를 결정하도록한다. 메시지가 있기때문에 그 메시지를 처리할 객체가 필요하기 때문이다.
메시지를 보내는 객체는 호출한쪽의 의도에 맞는 메시지를 보낼 책임을 갖고, 어떤 객체가 수신할지는 알지 못한다.
메시지를 받는 객체는 메시지를 처리할 책임을 갖는다.
책임 주도 설계
자 이젠 책임을 할당하기 전에 협력 관계
를 정리하는 것이 필요하다 라는 생각이 들어야한다.
협력 관계 파악은 아래 5가지 내용을 참고하여 생각해보면 도움이 된다.
- 시스템이 사용자에게 제공해야 하는 기능인 시스템 책임을 파악
- 시스템 책임을 더 작은 책임으로 분할
- 분할된 책임을 수행할 수 있는 적절한 객체 또는 역할을 찾아 책임을 할당
- 객체가 책임을 수행하는 도중 다른 객체의 도움이 필요한 경우 이를 책임질 적절한 객체 또는 역할을 찾는다.
- 해당 객체 또는 역할에게 책임을 할당함으로써 두 객체가 협력하게 한다.
책임을 결정한 후에 책임을 수행할 객체를 결정
객체 내부 상태는 객체들간의 책임이 어느정도 정리된 후에 결정하도록한다.
다음은 객체 책임 할당을 패턴으로 정리한 GRASP 패턴에 대해 알아보자