포스트

3장. 역할, 책입, 협력

3장. 역할, 책입, 협력
  • 객체지향 패어다임의 관점에서 핵심은 역할(role), 책임(responsibility), 협력(collaboration) 이다.
  • 클래스와 상속은 구현 매커니즘일 뿐


❐ 1. 협력


🌀 1-1. 영화 예매 시스템 돌아보기

영화 시스템 예시

  • 객체들이 애플리케이션 기능을 구현하기 위해 수행하는 상호작용을 협력이라고 한다.
  • 객체가 협력에 참여하기 위해 수행하는 로직을 책임이라고 부른다.
  • 객체들이 협력 안에서 수행하는 책임들이 모여 객체가 수행하는 역할을 구성한다.


🌀 1-2. 협력

협력이란?

  • 협력은 객체지향의 세계에서 기능을 구현할 수 있는 유일한 방법
  • 객체들은 메시지 전송을 통해 서로 소통한다.
  • 메시지를 수신한 객체는 메서드를 실행해 요청에 응답한다.
    • 객체가 메시지를 처리할 방법을 스스로 선택한다.


예시

  • 발신자 : Screening
  • 메시지 : calculateMovieFee(...)
  • 수신자 : Movie


정리

  • 객체들 사이의 협력을 구성하는 일련의 요청/응답의 흐름을 통해 애플리케이션 기능이 구현된다.


🌀 1-3. 협력이 설계를 위한 문맥을 결정한다.

객체가 가질 수 있는 ‘행동’을 결정하는 기준은?

  • 협력 안에서 객체가 처리할 메시지로 결정된다.
  • 협력이 바뀌면 행동도 바뀐다.


그렇다면 ‘객체의 상태’를 결정하는 기준은?

  • 객체가 행동하는데 필요한 정보에 의해 결정된다.
  • 객체는 스스로 결정하고 관리하는 자율적인 존재이기 때문
  • Movie를 예로 들면…
    • 행동 : 요금 계산
    • 상태(행동을 수행하는데 필요한 정보) : fee, discountPolicy


정리하면..

  • 객체가 참여하는 협력이 객체를 구성하는 행동과 상태를 모두 결정한다.
  • 따라서, 협력은 객체를 설계하는 일종의 문맥(context)을 제공한다.



❐ 2. 책임


🌀 2-1. 책임이란 무엇인가

책임이란? 무엇을 알고 있는가(knowing) + 무엇을 할 수 있는가(doing)

  • 객체지향 설계에서 가장 중요한 요소로, 협력에 참여하기 위해 객체가 수행하는 행동
  • 책임이란 객체에 의해 정의되는 응집도 있는 행위의 집합으로,
    객체가 유지해야 하는 정보와 수행할 수 있는 행동에 대해 개략적으로 서술한 문장이다.
  • 예시
    • Screening
      • doing : 영화를 예매하는 것
      • knowing : 자신이 상영할 영화
    • Movie
      • doing : 요금을 계산하는 것
      • knowing : 가격과 어떤 할인 정책이 적용됐는지


책임 vs 메시지

  • 일반적으로 책임과 메시지의 크기는 다르다.
  • 책임은 메시지보다 추상적이고 개념적으로도 더 크다.
  • 하나의 책임이 여러 메시지로 분할되기도 하고,
    하나의 객체가 수행할 수 있다고 생각했던 책임이 나중에는 여러 객체들의 협력으로만 해결되는 경우도 있다.


‘아는 것’과 ‘하는 것’은 밀접하게 연관대 있다.

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


CRC(Candidates Responsibility Collaborator) 카드

  • CRC 카드는 역할을 식별하고, 책임을 할당하며, 협력을 명시적으로 표현하는
    구체적이면서도 실용적인 설계 기법이다.


🌀 2-2. 책임 할당

Information Expert(정보 전문가) 패턴

  • 자율적인 객체를 만드는 가장 기본적인 방법은
    책임을 수행하는 데 필요한 정보를 잘알고 있는 전문가에게 그 책임을 할당하는 것
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.