본문 바로가기

책/Object

책임 할당하기

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

객체에게 중요한 것은 데이터가 아니라 외부에 제공하는 행동이다.

객체는 협력에 참여하기 위해 존재하며 협력 안에서 수행하는 책임이 객체의 존재가치를 증명한다.

데이터는 객체가 책임을 수행하는 데 필요한 재료를 제공할 뿐이다.


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

객체에게 할당된 책임의 품질은 협력에 적합한 정도로 결정된다.

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


책임 주도 설계(RDD)

1. 시스템이 사용자에게 제공해야 하는 기능인 시스템 책임을 파악한다.

2. 시스템 책임을 더 작은 책임으로 분할한다.

3. 분할된 책임을 수행할 수 있는 적절한 객체 또는 역할을 찾아 책임을 할당한다.

4. 객체가 책임을 수행하는 도중 다른 객체의 도움이 필요한 경우 이를 책임질 적절한 객체 또는 역할을 찾는다.

5. 해당 객체 또는 역할에게 책임을 할당함으로써 두 객체가 협력하게 한다.


GRASP 패턴

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

 - 설계를 시작하기 전에 도메인에 대한 개략적인 모습을 그려 보는 것

2. 정보 전문가(Information Expert)에게 책임을 할당하라

 - 책임을 수행할 정보를 알고 있는 객체에게 책임을 할당

 - 정보 전문가 패턴을 따르면 정보와 행동을 최대한 가까운 곳에 위치시키기 때문에 캡슐화를 유지할 수 있다.

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

높은 응집도(High Cohesion)

 - 복잡성을 관리할 수 있는 수준으로 유지

낮은 결합도(Low Coupling)

 - 의존성을 낮추고 변화의 영향을 줄이며 재사용성을 증가시킬 수 있음

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

A 객체와 B 객체의 관계가 다음 중 하나라면 A의 생성을 B의 역할로 부여하자

 - B가 A 객체를 포함하거나 참조한다.

 - B가 A 객체를 기록한다.

 - B가 A 객체를 긴밀하게 사용한다.

 - B가 A 객체를 초기화하는 데 필요한 데이터를 가지고 있다.

 - A가 B 객체의 일부이다.


낮은 응집도가 초래하는 문제를 해결하기 위해서는 변경의 이유에 따라 클래스를 분리해야 한다.

코드를 통해 변경의 이유를 파악할 수 있는 방법

1. 인스턴스 변수가 초기화되는 시점을 살펴보는 것

 - 함께 초기화되는 속성을 기준으로 코드를 분리

2. 메서드들이 인스턴스 변수를 사용하는 방식을 살펴보는 것

 - 속성 그룹과 해당 그룹에 접근하는 메서드 그룹을 기준으로 코드를 분리


' > Object' 카테고리의 다른 글

객체 분해  (0) 2020.07.02
메시지와 인터페이스  (0) 2020.06.29
설계 품질과 트레이드오프  (0) 2020.06.22
역할, 책임, 협력  (0) 2020.06.22
객체지향 프로그래밍  (0) 2020.06.02