[Chapter 05] 책임 할당하기

sonnie
lucky-sonnie
Published in
3 min readAug 10, 2020

🧩 데이터 중심 설계의 문제점

  1. 고립된 객체에 초점을 맞추기 때문에 캡슐화를 위반하기 쉽다.
  2. 요소들 사이의 결합도가 높아진다.
  3. 코드를 변경하기 어려워진다.

데이터 중심 설계의 해결 방법 → 책임에 초점을 맞추기

🧩 책임 주도 설계의 어려움

어떤 객체에게 어떤 책임을 할당할지 결정하기 어렵다. 동일한 문제를 해결할 수 있는 다양한 책임 할당 방법이 존재하고, 어떤 방법이 최선인지는 상황과 문맥에 따라 달라진다. 그렇기 때문에 다양한 관점에서 설계를 평가할 수 있어야 한다.

🧩 책임 주도 설계의 두가지 원칙

  • 데이터보다 행동을 먼저 결정하라.

“이 객체가 수행해야 하는 책임은 무엇인가”를 결정한 후에 “이 책임을 수행하는 데 필요한 데이터는 무엇인가”를 결정한다.

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

객체에게 할당된 책임의 품질은 협력에 적합한 정도로 결정된다. 객체의 입장에서 책임이 약간 어색하더라도 협력에 적합하다면 책임은 좋은 것이다. 책임은 객체가 참여하는 협력에 적합해야 한다. 협력에 적합한 책임을 수확하기 위해서는 메시지를 결정한 후에 객체를 선택해야 한다.

클라이언트가 전송할 메시지를 결정한 후에야 비로소 객체의 상태를 저장하는 데 필요한 내부 데이터에 관해 고민하기 시작한다.

🎯 책임 할당의 어려움을 해결하기 위한 GRASP 패턴

GRASP 패턴은 응집도, 결합도, 캡슐화 같은 다양한 기준에 따라 책임을 할당하고 결과를 교환할 수 있는 기준을 제공한다. (GRASP: General Responsibility Assignment Software Pattern)

  1. 도메인 개념에서 출발하기

설계를 시작하기 전에 도메인에 대한 개략적인 모습을 그려 보는 것이 유용하다. 도메인 안에는 무수히 많은 개념들이 존재하며 이 도메인 개념들을 책임 할당의 대상으로 사용하면 코드에 도메인의 모습을 투영하기가 좀 더 수월해진다. 하지만 이는 출발점이기 때문에 개념들의 의미와 관계가 완벽할 필요는 없다.

2. 정보 정문가에게 책임을 할당하라

책임을 수행할 정보를 알고 있는 객체에게 책임을 할당한다. GRASP에서는 이를 Information Expert(정보 전문가) 패턴이라고 한다.

✔ ︎Information Expert(정보 전문가) 패턴: 정보를 알고 있는 객체만이 책임을 어떻게 수행할지 스스로 결정한다. 필요한 정보를 가지고 있는 객체들로 책임이 분산되기 때문에 캡슐화를 유지하고, 높은 응집도 → 낮은 결합도 → 간결하고 유지보수 하기 쉬운 시스템으로 이어진다.

책임을 수행하는 객체가 정보를 ‘알고’ 있다고 해서 그 정보를 ‘저장’하고 있을 필요는 없다.

3. 높은 응집도와 낮은 결합도

높은 응집도와 낮은 결합도는 객체에 책임을 할당할 때 항상 고려해야 하는 기본 원리다. 다양한 협력 패턴 중에서 높은 응집도와 낮은 결합도를 얻을 수 있는 설계가 있다면 그 설계를 선택해야 한다.

4. 창조자에게 객체 생성 책임을 할당하라

Creator(창조자) 패턴은 객체를 생성할 책임을 어떤 객체에게 할당할지에 대한 지침을 제공한다. 객체 A를 생성해야 할 때, 아래 조건을 최대한 많이 만족시키는 B에게 객체 생성 책임을 할당하면 된다.

  • B가 A 객체를 포함하거나 참조한다.
  • B가 A 객체를 기록한다.
  • B가 A 객체를 긴밀하게 사용한다.
  • B가 A 객체를 초기화하는 데 필요한 데이터를 가지고 있다.

이미 결합돼 있는 객체에게 생성 책임을 할당하는 것은 설계의 전체적인 결합도에 영향을 미치지 않기 때문에 설계가 낮은 결합도를 유지할 수 있게 한다.

--

--