오브젝트 책(챕터3: 역할, 책임, 협력)
목차
- 책임
- 책임이란 무엇인가
- 책임 할당
- 책잉 주도 설계
- 메시지가 객체를 결정한다
- 행동이 상태를 결정한다
챕터3 역할, 책임, 협력에서
책임에 대해 다루려고 합니다.
- 책임
- 책임이란 무엇인가
- 책임: 협력에 참여하기 위해 객체가 수행하는 행동
- 객체의 책임은 객체가 ‘무엇을 할 수 있는가’와 ‘무엇을 알고 있는가’로 구성된다.
- 하는 것
- 객체를 생성하거나 계산을 수행하는 등의 스스로 하는 것
- 다른 객체의 행동을 시작시키는 것
- 다른 객체의 활동을 제어하고 조절하는 것
- 사적인 정보에 관해 아는 것
- 관련된 객체에 관해 아는 것
- 자신이 유도하거나 계산할 수 있는 것에 관해 아는 것
- 협력 안에서 객체에게 할당한 책임이 외부의 인터페이스와 내부의 속성을 결정한다.
- 중요한 사실은 책임의 관점에서 ‘아는 것’과 ‘하는 것’이 밀접하게 연관돼 있다. 객체는 자신이 맡은 책임을 수행하는 데 필요한 정보를 알고 있을 책임이 있다. 객체는 자신이 할 수 없는 작업을 도와줄 객체를 알고 있을 책임이 있다.
- 책임은 객체지향 서계의 핵심이다. 객체지향 개발에서 가장 중요한 능력은 책임을 능숙하게 소프트웨어 객체에 할당하는 것
- 협력이 중요한 이유는 객체에게 할당할 책임을 결정할 수 있는 문맥을 제공하기 때문 CRC(Candidate, Responsibility, Collaborator)카드는 역할을 식별하고 책임을 할당하며, 협력을 명시적으로 표현하는 구체적이면서도 실용적인 설계 기법이다.
Responsibility1(상영 정보를 알고 있다) Collaborator(Movie) Responsibility2(예매 정보를 생성한다) - 책임 할당
- 자율적인 객체를 만드는 가장 기본적인 방법은 책임을 수행하는데 필요한 정보를 가장 잘 알고 있는 전문가에게 그 책임을 할당하는 것이다. → INFORMATION EXPERT(정보 전문가 패턴)
- 객체지향 설계는 시스템의 책임을 완료하는데 필요한 더 작은 책임을 찾아내고 이를 객체들에게 할당하는 반복적인 과정을 통해 모양을 갖춰간다.
- 객체지향 설계는 협력에 필요한 메시지를 찾고 메시지에 적절한 객체를 선택하는 반복적인 과정을 통해 이루어짐. 그리고 이런 메시지가 메시지를 수신할 객체의 책임을 결정한다. 이렇게 결정된 메시지가 객체의 퍼블릭 인터페이스를 구성한다. 협력을 설계하면서 객체의 책임을 식별해 나가는 과정에서 최종적으로 얻게 되는 결과물은 시스템을 구성하는 객체들의 인터페이스와 오퍼레이션의 목록이다. → 정보 전문가에게 책임을 할당하는 것만으로도 상태와 행동을 함께 가지는 자율적인 객체를 만들 가능성이 높아짐
- 책잉 주도 설계
- 책임주도설계(Responsibility-Driven Design, RDD):
- 시스템이 사용자에게 제공해야하는 기능인 시스템 책임을 파악한다.
- 시스템 책임을 더 작은 책임으로 분할한다.
- 분할된 책임을 수행할 수 있는 적절한 객체 또는 역할을 찾아 책임을 할당한다.
- 객체가 책임을 수행하는 도중 다른 객체의 도움이 필요한 경우 이를 책임질 적절한 객체 또는 역할을 찾는다.
- 해당 객체 또는 역할에게 책임을 할당함으로써 두 객체가 협력하게 한다.
- 책임을 할당할 때 고려해야하는 요소 두가지
- 메시지가 객체를 결정한다.
- 객체에게 책임을 할당하는 데 필요한 메시지를 먼저 식별하고 메시지를 처리할 객체를 나중에 선택하는 것이 중요하다. → 객체가 메시지를 선택하는 것이 아니라 메시지가 객체를 선택하게 했다 (명령하기 때문)
- 메시지가 객체를 선택하게 해야하는 두가지 중요한 이유
- 객체가 최소한의 인터페이스(minimal interface)를 가질 수 있게 된다.
- 객체는 충분히 추상적인 인터페이스(abstract interface)를 가질 수 있게 된다.
- 행동이 상태를 결정한다.
- 객체가 존재하는 이유는 협력에 참여하기 위해서다. 따라서 객체는 협력에 필요한 행동을 제공해야 한다. 객체를 객체답게 만드는 것은 객체의 상태가 아니라 객체가 다른 객체에게 제공하는 행동이다.
- 객체의 행동은 객체가 협력에 참여할 수 있는 유일한 방법이다.
- 캡슐화를 위반하지 않도록 구현에 대한 결정을 뒤로 미루면서 객체의 행위를 고려하기 위해서는 항상 협력이라는 문맥 안에서 객체를 생각해야 한다. 개별 객체의 상태와 행동이 아닌 시스템의 기능을 구현하기 위한 협력에 초점을 맞춰야만 응집도가 높고 결합도가 낮은 객체들을 창조할 수 있다. → 협력이 객체의 행동을 결정 → 행동이 상태를 결정 → 그 행동이 바로 객체의 책임이 된다.
- 메시지가 객체를 결정한다.
- 책임이란 무엇인가
'오브젝트' 카테고리의 다른 글
3. 역할, 책임, 협력 - 4 (0) | 2022.10.14 |
---|---|
3. 역할, 책임, 협력 - 3 (0) | 2022.10.14 |
3. 역할, 책임, 협력 - 1 (0) | 2022.10.14 |
2. 객체지향 프로그래밍 (0) | 2022.10.14 |
1. 객체, 설계 (0) | 2022.10.14 |
댓글