객체지향의 본질은 적절한 역할과 책임을 가진 객체들이 서로 협력하는 공동체를 창조하는 것이다.
여기서 등장하는 핵심 개념인 역할, 책임, 협력에 대해 알아보자.
1. 협력
협력이란, 어떤 객체가 다른 객체에게 무엇인가를 요청하는 것이다.
다양한 객체들은 메시지를 주고받으면서 상호작용하고, 메시지를 수신한 객체는 메서드를 실행하여 요청에 응답한다.
이 때 협력에 참여하기 위해 수행하는 로직이 책임이고, 책임들이 모여 객체가 수행하는 역할을 구성한다.
더 자세히 협력의 조건을 살펴보자.
o 자율적인 객체 만들기
: 객체를 생성할 때에는 정보와 정보에 기반한 행동이 같은 객체 안에 모여있어야 한다.
이 때, 객체는 자신의 상태를 직접 관리하고 스스로 행동할 수 있는 자율적인 객체가 된다.
o 메시지 요청하기
: 자율적인 객체는 책임 수행 중 필요한 정보를 알지 못하거나 외부의 도움이 필요한 경우 적절한 객체에게 메시지를 전송해서 협력을 요청한다.
2. 책임
협력에 참여하기 위해서 객체가 수행하는 행동을 책임이라고 한다.
"아는 것"에 대한 책임과 "하는 것"에 대한 책임으로 나뉜다. 즉, 객체가 뭘 수행하고 어떤 정보를 알고있어야 하는지에 대한 것이다.
책임은 이를 수행하는 데 필요한 정보를 가장 잘 알고 있는 전문가 객체에 할당된다.
이 때 중요한 것은 객체가 필요한 메시지를 먼저 식별하고, 메시지가 객체를 선택한다는 것이며, 이유는 다음과 같다.
o 최소한의 인터페이스
: 객체에 필요한 메시지가 있을 때 퍼블릭 인터페이스에 추가
o 추상적인 인터페이스
: 객체의 인터페이스는 무엇을 수행하는지만 공개되고, 어떻게 수행하는지는 노출되지 않음
3. 역할
메시지 처리를 위해서 적절한 역할을 찾고, 해당 역할을 수행할 수 있는 객체를 선택한다.
역할 없이 객체만으로도 협력을 설계할 수 있지만, 역할을 통해 유연하고 재사용 가능한 협력을 얻을 수 있다.
역할의 구현은 추상 클래스와 인터페이스를 통해 가능하다.
-> 중요한 정책을 상위 수준에서 단순화
-> 공통의 책임을 바탕으로 객체의 종류를 숨기며, 설계가 유연해짐.
[참고서적] 오브젝트, 조영호 저자
'책책책' 카테고리의 다른 글
[DDD START!] 애그리거트를 통한 복잡한 도메인 모델 간 관계 관리 (0) | 2021.08.20 |
---|---|
[DDD START!] 웹 애플리케이션 아키텍처 설계 - DIP 적용 (0) | 2021.08.12 |