1) 책임이란 무엇인가?
- 객체를 설계하기 위해 필요한 문맥인 협력이 갖춰졌다고 하자.
다음으로 할 일은 협력에 필요한 행동을 수행할 수 있는 적절한 객체를 찾는 것이다.
이 때, 협력에 참여하기 위해 객체가 수행하는 행동을 책임이라고 부른다.
- 책임은 객체에 의해 정의되는 응집도 있는 행위의 집합으로,
객체가 유지해야 하는 정보와 수행할 수 있는 행동에 대해
개략적으로 서술한 문장이다.
- 즉, 객체의 책임은 '무엇을 알고 있는가'와 '무엇을 할 수 있는가'로 구성된다.
크레이그 라만(Craig Larman)은 이러한 분류 체계에 따라
객체의 책임을 크게 하는 것(doing)과 아는 것(knowing)의 두 가지 범주로 나누어 세분화하고 있다.
- 영화 예매 시스템에서 Screening의 책임은 무엇인가? 영화를 예매하는 것이다.
Movie의 책임은 무엇인가? 요금을 계산하는 것이다.
Screening은 영화를 예매할 수 있어야 한다. 이것은 아는 것과 관련된 책임이다.
Movie는 예매 가격을 계산할 책임을 진다. 이것은 하는 것과 관련된 책임이다.
- 또한, 가격과 어떤 할인 정책이 적용됐는지도 알고 있어야 한다.
이것은 아는 것과 관렫뇐 책임이다.
- Screening이 reserve 메시지를 수신하고, movie를 인스턴스 변수로 포함하는 이유는
협력 안에서 영화를 예매할 책임을 수행해야 하기 때문이다.
Movie가 calculateMovieFee 메시지를 수신할 수 있고, fee와 discountPolicy를 속성으로
가지는 이유는 협력 안에서 가격을 계산할 책임을 할당받았기 때문이다.
- 이처럼 협력 안에서 객체에게 할당한 책임이 외부의 인터페이스와 내부의 속성을 결정한다.
- 일반적으로 책임과 메시지의 크기는 다르다.
책임은 객체가 수행할 수 있는 행동을 종합적이고 간략하게 서술하기 때문에
메시지보다 추상적이고 개념적으로 더 크다.
- 처음에는 단순한 책임이라고 생각했던 것이 여러 개의 메시지로 분할되기도 하고
하나의 객체가 수행할 수 있다고 생각했던 책임이
나중에는 여러 객체들이 협력해야만 하는 커다란 책임으로 자라는 것이 일반적이다.
- 여기서 중요한 사실은 책임의 관점에서 '아는 것'과 '하는 것'이 밀접하게 연관돼 있다는 점이다.
객체는 자신이 맡은 책임을 수행하는 데 필요한 정보를 알고 있을 책임이 있다.
또한, 객체는 자신이 할 수 없는 작업을 도와줄 객체를 알고 있을 책임이 있다.
- 어떤 책임을 수행하기 위해서는 그 책임을 수행하는 데 필요한 정보도
함께 알아야 할 책임이 있는 것이다.
이것은 객체에게 책임을 할당하기 위한 가장 기본적인 원칙에 대한 힌트를 제공한다.
- 책임은 객체지향 설계의 핵심이다.
크레이그 라만은 "객체지향 개발에서 가장 중요한 능력은 책임을 능숙하게 소프트웨어에게 할당하는 것"
이라는 말로 책임 할당의 중요성을 강조하기도 했다.
- 사실 협력이 중요한 이유는 객체에게 할당할 책임을 결정할 수 있는 문맥을 제공하기 때문이다.
적절한 협력이 적절한 책임을 제공하고, 적절한 책임을 적절한 객체에게 할당해야만
단순하고 유연한 설계를 창조할 수 있다.
'오브젝트' 카테고리의 다른 글
[오브젝트] 절챠지향과 객체지향 (0) | 2024.12.25 |
---|---|
[오브젝트] 의존성 관리하기 (0) | 2024.12.13 |