728x90
객체를 설계하기 위해서는 협력에 필요한 행동을 제일 먼저 결정하고 행동을 수행하기에 적합한 객체를 선택한 후에 객체의 행동을 구현하는데 필요한 데이터를 나중에 선택해야 한다.
객체지향 설계 흐름
- 하나의 객체를 설계하기 위해서는 우선 설계를 위한 문맥이 필요하다(협력을 위한 문맥 결정)
- 객체가 다른 객체와 협력하기 위해 보내는 요청을 객체를 설계하기 위한 문맥으로 활용
- 요청을 처리하기 위한 책임을 결정(필요한 책임 식별)
- 책임을 수행하는데 적합한 객체를 선택(책임 수행 객체 선택)
- 객체 안에 책임을 부여(책임 구현)
- 클래스와 메서드를 이용해서 구현
- 책임을 부연하는데 필요한 데이터를 결정하고 클래스의 필드로 정의(데이터 결정)
책임

- 객체지향에서는 협력에 참여하기 위해 한 객체가 다른 객체에게 제공하는 행동을 책임이라고 한다.
- DiscountPolicy는 할인 요금을 계산하는 책임을 DiscountCondition은 할인 여부를 판단하는 책임을 가진다.
- 객체가 수행할 책임을 기반으로 객체와 객체 사이의 협력을 설계하는 방식을 책임 주도 설계 방법이라고 부른다.
- 객체가 외부에 제공해야 하는 카테고리
- 하는 것
- 객체를 생성하거나 계산을 하는 등의 스스로 하는 것
- 다른 객체의 행동을 시작시키는 것
- 다른 객체의 활동을 제어하고 조절하는 것
- 아는 것
- private로 캡슐화된 상태(데이터)에 관해 아는 것
- 관련된 객체에 관하여 아는 것
- 자신이 유도하거나 계산할 수 있는 것에 관하여 아는 것
- 하는 것
책임이 중요한 이유는 객체의 구현이 아니라 객체 사이의 협력에 초점을 맞출 수 있도록 해주기 때문이다. 책임 관점에서 객체를 설계하면, 객체 내부의 세부 사항에 대한 결정은 뒤로 미루고 외부에 제공해야 하는 행동을 먼저 결정할 수 있게 해준다.
협력을 설계하는데 필요한 문맥
- 객체지향에서는 시스템이 외부에 제공해야 하는 기능을 협력을 위한 문맥으로 사용한다.
- 객체지향 설계에서는 시스템이 제공해야 하는 기능을 시스템에 전달된 요청으로 간주하는데, 이 요청을 수행할 적합한 객체를 결정하는 일을 시작으로 기능을 구현하는데 필요한 객체들을 협력을 설계하면 된다.
- 객체지향에서는 애플리케이션의 기능을 기반으로 객체들 사이의 협력을 설계한다
책임 주도 설계

아래 과정을 반복하면서 시스템 기능을 설계하는 방식을 책임 주도 설계 방식이라고 한다.
- 애플리케이션이 제공할 기능 파악
- 애플리케이션의 기능 요구사항을 시스템의 책임으로 변환
- 시스템의 책임을 객체의 책임으로 변환
- 책임을 담당할 적절한 객체 선택
- 객체의 책임 일부를 수행하기 위해 외부의 도움이 필요하다면 다른 객체에게 도움을 요청
- 이 요청을 또 다른 객체의 책임으로 변환
- 책임을 담당할 적절한 객체 선택
책임 주도 설계에서 가장 중요하면서 어려운 일은 책임을 할당할 적합한 객체를 선택하는 것이다. 객체지향 설계는 런타임에 실제로 동작하는 객체 사이의 협력을 먼저 설계한 뒤, 이 협력을 실현하는데 필요한 클래스를 구현하는 순서로 진행해야 한다.
책임 주도 설계에서의 문맥: 애플리케이션의 기능이 협력을 위한 문맥을 제공하며, 협력이 책임을 위한 문맥을 제공한다. 이처럼 문맥을 제한하면 수정이 용이하며, 유지보수 하기 좋은 애플리케이션을 작성할 수 있다.
728x90
'오브젝트' 카테고리의 다른 글
| Ch04. 책임 할당하기 - 정보와 책임 할당(정보 전문가) (0) | 2024.10.05 |
|---|---|
| Ch03. 객체지향 기본 원칙 - 표현적 차이 줄이기 (0) | 2024.10.01 |
| Ch03. 객체지향 기본 원칙 - 객체지향 설계 원칙 (0) | 2024.10.01 |
| Ch02. 절차적인 설계 개선하기 - 절차에서 객체로 (0) | 2024.09.29 |
| Ch02. 절차적인 설계 개선하기 - 데이터와 프로세스 통합하기 (0) | 2024.09.29 |