[오브젝트] 12일차

da__ell·2023년 8월 15일
0

독서 - 오브젝트

목록 보기
12/25
post-thumbnail

p. 142 ~ p. 155

높은 응집도와 낮은 결합도

동일한 기능을 구현할 수 있는 무수히 많은 설계가 존재한다. 올바른 책임 할당을 위해 INFORMATION EXPERT 패턴 이외에 다른 책임 할당 패턴들을 함께 고려할 필요가 있다.

높은 응집도와 낮은 결합도는 객체에 책임을 할당할 때 항상 고려해야 하는 기본 원리다. 책임을 할당 할 수 있는 다양한 대안이 있다면 응집도와 결합도의 측면에서 더 나은 대안을 선택하는 것이 좋다.

GRASP에서는 이를 LOW COUPLING(낮은 결합도) 패턴과 HIGH COHESION(높은 응집도) 패턴이라고 부른다.

이 패턴들은 설계를 진행하면서 책임과 협력의 품질을 검토하는 데 사용할 수 있는 중요한 평가 기준이다.

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

협력의 최종 결과물이 어떠한 인스턴스를 생성하는 것이라면, 협력에 참여하는 어떤 객체에 해당 인스턴스를 생성할 책임을 할당해야 한다. GRASP의 CREATER(창조자) 패턴은 이 경우 사용할 수 있는 책임 할당 패턴이다.

이 패턴의 의도는 어떤 방식으로 생성되든 객체와 연결되거나 관련될 필요가 있는 객체에 해당 객체를 생성할 책임을 맡기는 것이다.
생성될 객체에 대해서 알고 있어야 하거나, 관련될 필요가 있는 객체에 해당 객체를 생성할 책임을 맡기는 것이다. 이렇게 두 객체는 서로 결합되고, 이미 결합된 객체에게 생성 책임을 할당하는 것은 설계의 전체적인 결합도에 영향을 미치지 않는다. → 이미 존재하는 객체 사이의 관계를 이용하기 때문에 설계가 낮은 결합도를 유지할 수 있다.

대략적으로 필요한 책임을 객체에 할당하는 것은 설계를 시작하기 위한 대략적인 과정이고 실제 설계는 코드를 작성하면서 이뤄진다.

구현을 통한 검증

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

일반적으로 설계를 개선하는 작업은 변경의 이유가 하나 이상인 클래스를 찾는 것으로부터 시작하는 것이 좋다.
코드를 통해 변경의 이유를 파악할 수 있는 방법은 다음과 같다.

  1. 인스턴스 변수가 초기화되는 시점을 살펴보는 것이다.
    응집도가 높은 클래스는 인스턴스를 생성할 때 모든 속성을 함께 초기화한다. 반면 응집도가 낮은 클래스는 객체의 속성 중 일부만 초기화한다. 클래스의 속성이 서로 다른 시점에 초기화되거나 일부만 초기화된다는 것은 응집도가 낮다는 증거다. → 함께 초기화 되는 속성을 기준으로 코드를 분리해야 한다.
  2. 메서드들이 인스턴스 변수를 사용하는 방식을 살펴보는 것이다.
    모든 메서드가 객체의 모든 속성을 사용한다면 클래스의 응집도는 높다. 반면 메서드들이 사용하는 속성에 따라 그룹이 나뉜다면 클래스의 응집도가 낮다.
    → 클래스의 응집도를 높이기 위해서는 속성 그룹과 해당 그룹에 접근하는 메서드 그룹을 기준으로 코드를 분리해야 한다.

메서드의 크기가 너무 커서 긴 코드 라인 속에 문제가 명확하게 보이지 않을 수도 있다. 이 경우 긴 메서드를 응집도 높은 작은 메서드로 분해해 나가는 방법이 있다.

profile
daelkdev@gmail.com

0개의 댓글