본문 바로가기

오브젝트

[오브젝트] 책임

1) 책임이란 무엇인가?

- 객체를 설계하기 위해 필요한 문맥인 협력이 갖춰졌다고 하자.

  다음으로 할 일은 협력에 필요한 행동을 수행할 수 있는 적절한 객체를 찾는 것이다. 

  이 때, 협력에 참여하기 위해 객체가 수행하는 행동을 책임이라고 부른다. 

 

- 책임은 객체에 의해 정의되는 응집도 있는 행위의 집합으로,

  객체가 유지해야 하는 정보와 수행할 수 있는 행동에 대해 

  개략적으로 서술한 문장이다. 

 

- 즉, 객체의 책임은 '무엇을 알고 있는가'와 '무엇을 할 수 있는가'로 구성된다.

  크레이그 라만(Craig Larman)은 이러한 분류 체계에 따라

  객체의 책임을 크게 하는 것(doing)과 아는 것(knowing)의 두 가지 범주로 나누어 세분화하고 있다. 

 

- 영화 예매 시스템에서 Screening의 책임은 무엇인가? 영화를 예매하는 것이다. 

  Movie의 책임은 무엇인가? 요금을 계산하는 것이다. 

  Screening은 영화를 예매할 수 있어야 한다. 이것은 아는 것과 관련된 책임이다. 

  Movie는 예매 가격을 계산할 책임을 진다. 이것은 하는 것과 관련된 책임이다. 

 

- 또한, 가격과 어떤 할인 정책이 적용됐는지도 알고 있어야 한다. 

  이것은 아는 것과 관렫뇐 책임이다. 

 

- Screening이 reserve 메시지를 수신하고, movie를 인스턴스 변수로 포함하는 이유는

  협력 안에서 영화를 예매할 책임을 수행해야 하기 때문이다.

  Movie가 calculateMovieFee 메시지를 수신할 수 있고, fee와 discountPolicy를 속성으로

  가지는 이유는 협력 안에서 가격을 계산할 책임을 할당받았기 때문이다. 

  

- 이처럼 협력 안에서 객체에게 할당한 책임이 외부의 인터페이스와 내부의 속성을 결정한다. 

 

- 일반적으로 책임과 메시지의 크기는 다르다.

  책임은 객체가 수행할 수 있는 행동을 종합적이고 간략하게 서술하기 때문에

  메시지보다 추상적이고 개념적으로 더 크다.

  

- 처음에는 단순한 책임이라고 생각했던 것이 여러 개의 메시지로 분할되기도 하고

  하나의 객체가 수행할 수 있다고 생각했던 책임이 

  나중에는 여러 객체들이 협력해야만 하는 커다란 책임으로 자라는 것이 일반적이다. 

 

- 여기서 중요한 사실은 책임의 관점에서 '아는 것'과 '하는 것'이 밀접하게 연관돼 있다는 점이다.

  객체는 자신이 맡은 책임을 수행하는 데 필요한 정보를 알고 있을 책임이 있다.

  또한, 객체는 자신이 할 수 없는 작업을 도와줄 객체를 알고 있을 책임이 있다.

 

- 어떤 책임을 수행하기 위해서는 그 책임을 수행하는 데 필요한 정보도

  함께 알아야 할 책임이 있는 것이다. 

  이것은 객체에게 책임을 할당하기 위한 가장 기본적인 원칙에 대한 힌트를 제공한다.

 

- 책임은 객체지향 설계의 핵심이다. 

  크레이그 라만은 "객체지향 개발에서 가장 중요한 능력은 책임을 능숙하게 소프트웨어에게 할당하는 것"

  이라는 말로 책임 할당의 중요성을 강조하기도 했다. 

 

- 사실 협력이 중요한 이유는 객체에게 할당할 책임을 결정할 수 있는 문맥을 제공하기 때문이다.

  적절한 협력이 적절한 책임을 제공하고, 적절한 책임을 적절한 객체에게 할당해야만

  단순하고 유연한 설계를 창조할 수 있다. 

'오브젝트' 카테고리의 다른 글

[오브젝트] 절챠지향과 객체지향  (0) 2024.12.25
[오브젝트] 의존성 관리하기  (0) 2024.12.13