[오브젝트 : 코드로 이해하는 객체지향 설계] 5. 책임 할당하기
2021. 9. 2. 21:18ㆍ오브젝트 : 코드로 이해하는 객체지향 설계
1. 책임 주도 설계
- 데이터보다 행동을 먼저 결정하라
- 협력이라는 문맥 안에서 책임을 결정하라
책임 주도 설계의 흐름
- 시스템이 사용자에게 제공해야 하는 기능인 시스템 책임을 파악한다.
- 시스템 책임을 더 작은 책임으로 분할한다.
- 분할 된 책임을 수행할 수 있는 적절한 객체 또는 역할을 찾아 책임을 할당한다.
- 객체가 책임을 수행하는 도중 다른 객체의 도움이 필요한 경우 이를 책임질 적절한 객체 또는 역할을 찾는다.
- 해당 객체 또는 역할에게 책임을 할당함으로써 두 객체가 협력하게 한다.
2. GRASP패턴
GRASP(General Responsibility Assignment Software Pattern)⇒ 일반적인 책임 할당을 위한 소프트웨어 패턴으로 객체에게 책임을 할당할 때 지침으로 삼을 수 있는 원칙들의 집합
영화 예매 시스템을 구성하는 도메인 개념
정보 전문가에게 책임을 할당하라
- 메시지를 전송할 객체는 무엇을 원하는가?
- 메시지를 수신할 적합한 객체는 누구인가?
정보 전문가 패턴(INFORMATION EXPERT) ⇒ 수행할 정보를 알고 있는 객체에게 책임을 할당하는 것
높은 응집도와 낮은 결합도
낮은 결합도(LOW COUPLING)패턴과 높은 응집도(HIGH COHESION)패턴
- 낮은 결합도 ⇒ 도메인 상으로 이미 영화와 할인 정책은 결합되어 있다.
- 높은 응집도 ⇒ 상영의 가장 중요한 책임은 예매를 생성하는 것이다.
창조자에게 객체 생성 책임을 할당하라
영화 예매 협력의 최종 결과물은 Reservation인스턴스를 생성하는 것이다.
⇒ 협력에 참여하는 어떤 객체에게는 Reservation인스턴스를 생성할 책임을 할당해야 한다는 것
창조자(CREATOR) 패턴 ⇒ 객체를 생성할 책임을 어떤 객체에게 할당할지에 대한 지침을 제공
변경의 이유를 파악하는 방법
- 인스턴스 변수가 초기화되는 시점을 살펴본다. ⇒ 클래스의 속성이 서로 다른 시점에 초기화되거나 일부만 초기화된다는 것은 응집도가 낮다는 증거이다.
- 메서드들이 인스턴스 변수를 사용하는 방식을 살펴본다. ⇒ 메서드들이 사용하는 속성에 따라 그룹이 나뉜다면 클래스의 응집도가 낮다고 볼 수 있다.
※ 응집도를 높이기 위해서는 속성 그룹과 해당 그룹에 접근하는 메서드 그룹을 기준으로 코드를 분리해야 한다.
다형성(POLTMORPHISM) 패턴 ⇒ 객체의 타입에 따라 변하는 행동이 있으면 타입을 분리하고 변화하는 행동을 각 타입의 책임으로 할당하는 것
변경 보호(PROTECTED VARIATIONS) 패턴 ⇒ 변경을 캡슐화하도록 책임을 할당하는 것
변경과 유연성
변경에 대비할 수 있는 두 가지 방법
- 코드를 이애하고 수정하기 쉽도록 단순하게 설계한다.
- 코드를 수정하지 않고 변경을 수용할 수 있도록 코드를 더 유연하게 만드는 것
반응형
'오브젝트 : 코드로 이해하는 객체지향 설계' 카테고리의 다른 글
[오브젝트 : 코드로 이해하는 객체지향 설계] 6. 메시지와 인터페이스 (0) | 2021.09.08 |
---|---|
[오브젝트 : 코드로 이해하는 객체지향 설계] 3. 역할, 책임, 협력 (0) | 2021.08.24 |
[오브젝트 : 코드로 이해하는 객체지향 설계] 2. 객체지향 프로그래밍 (0) | 2021.08.17 |
[오브젝트 : 코드로 이해하는 객체지향 설계] 1. 객체, 설계 (0) | 2021.08.11 |