오브젝트

Ch04. 책임 할당하기 - 정보와 책임 할당(정보 전문가)

webmaster 2024. 10. 5. 20:35
728x90

도메인 협력 설계

  1. 시스템 내부의 상태 변경을 도메인 모델에 기반한 개념들의 집합으로 가시화
  2. 기능이 실행된 후의 결과를 정리해 본다(ex. 상영을 예매하라는 실행 결과로 예매를 반환한다)
  3. 기능을 실행한 후의 상태 변경을 정리해 본다.( ex. 상영을 예매한 후에는 시스템 안에 예매라는 도메인 모델이 생성되며, 이는 상영과 연결된다.)
  4. 상태 변경을 기반으로 객체 협력을 설계한다.
    • 애플리케이션을 기능을 시스템의 책임으로, 시스템을 책임을 다시 객체의 책임으로 변환한다.
    • 초점이 기능을 시작하는 책임을 어떤 객체에게 할당할지를 결정하는 문제로 전환이 된다.
    • 책임을 수행할 후보 객체를 찾을 때는 도메인 모델에서 어떤 객체가 적합한지 찾아봐야 한다.

정보 전문가 패턴(Information Expert)

정보 전문가 패턴은 책임 할당 문제를 해결하기 위해 적용할 수 있는 가장 일반적이고 보편적인 해결 방법이다. 책임을 할당하기에 적합한 후보를 찾기 위해 가장 먼저 적용해야 하는 패턴 중 하나이다.

  • 문제 - 책임을 객체에게 할당하는 일반적인 원칙은 무엇인가?
  • 해결방법 - 책임을 수행하는데 필요한 정보를 가장 많이 알고 있는 객체에게 할당하라

여기서 정보는 데이터가 아니라 외부에 제공하는 행동이다. 이 관점에서 정보 전문가란 어떤 정보가 필요할  때 이 정보에 대한 질문에 답을 해줄 수 있는 객체를 의미한다. 객체지향 관점에서는 객체가 내부에 해당 데이터를 저장하고 있지 않더라도 정보에 대한 질문에 답할 수 있다면, 해당 정보를 책임지고 있는 것으로 간주한다. 즉 정보 전문가를 찾는 건 어떤 상태를 수정하거나 질문에 답할 수 있는 객체에게 책임을 할당하는 것이라고 할 수 있다.

 

참고: 모든 사람들이 같은 객체에 책임을 할당하는 것에 동의할 수는 없다. 다수의 사람들이 자연스럽게 느끼는 방식으로 객체의 책임을 할당해야 한다. 즉, 함께 일하는 사람들 중 대다수가 합리적이라고 동의하면 그게 정답이 된다. 객체지향 설계의 목표는 완벽한 모델을 구축하는 것이 아니다. 여러 사람이 동의할 수 있는 모델을 구축할 수 있다면 목표를 달성했다고 볼 수 있으며, 시스템에 대한 공통의 멘탈 모델을 만드는 것객체지향에 목표이다. 그리고 이러한 멘탈 모델은 도메인 모델에 기반해야 한다.

 

 

객체는 내부 상태보다 행동(책임)이 중요하다.

객체 내부의 데이터 저장 방식과 메서드의 수행 방식을 구현이라고 부르며,  외부에서 객체가 행동을 수행하도록 요청할 수 있는 메서드의 시그니처를 인터페이스라 부른다. 객체가 수행할 책임만 동일하게 유지한다면 내부의 구현 방식을 바꾸더라도 외부에 영향을 미치지 않는다(인터페이스만 동일하다면 구현이 다르더라도 영향을 미치지 않는다) 즉, 책임만 잘 정의한다면 객체 내부의 구현은 언제라도 변경할 수 있기 때문에 객체 내부의 구현보다 행동(인터페이스)이 더 중요하다.
행동을 먼저 결정해서 외부의 객체가 인터페이스에 의존하도록 만들면 객체 내부의 구현을 변경하더라도 외부에 영향을 미치지 않을 수 있다.

 

목적어에 책임을 할당하라

목적어에 책임을 할당하라

정보 전문가 패턴을 통해서도 책임 할당이 애매하다면, 목적어에 책임을 할당하라. 현재 책임을 문장으로 써본 다음에 목적어에 해당하는 명사의 책임을 할당하는 방법을 사용할 수도 있다. 예를 들어 "상영을 예매하라" 책임일 경우, 목적어인 상영에 예매한 책임을 할당하면 된다. 객체는 스스로 책임을 수행하는 자율적인 존재이기 때문에 목적어를 주어로 바꾸면 능동적으로 그 행동을 수행하도록 만들 수 있다.

즉, 책임을 할당한 후보가 혼동된다면, 책임에서 목적어를 찾은 다음에 그 목적어에 책임을 할당해 보자

 

 

 

728x90