Skip to main content

3. 역할, 책임, 협력

  • 객체지향 설계의 핵심은 역할(role), 책임(responsibility), 협력(collaboration) 입니다.

01. 협력#

영화 예매 시스템 돌아가기#

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

협력#

  • 메시지 전송(message sending) 은 객체 사이의 협력을 위해 사용할 수 있는 유일한 커뮤니케이션 수단입니다.
  • 메시지를 수신한 객체는 메서드를 실행해 요청에 응답합니다.
  • 객체를 자율적으로 만드는 가장 기본적인 방법은 내부 구현을 캡슐화하는 것입니다.

협력이 설계를 위한 문맥을 결정한다#

  • 협력은 객체를 설계하는 데 필요한 일종의 문맥(context) 을 제공합니다.

02. 책임#

책임이란 무엇인가#

  • 책임을 크게 하는 것(doing)아는 것(knowing) 의 두 가지 범주로 나누어 세분화할 수 있습니다.
  • 하는 것
    • 객체를 생성하거나 계산을 수행하는 등의 스스로 하는 것
    • 다른 객체의 행동을 시작시키는 것
    • 다른 객체의 활동을 제어하는 조절하는 것
  • 아는 것
    • 사적인 정보에 관해 아는 것
    • 관련된 객체에 관해 아는 것
    • 자신이 유도하거나 계산할 수 있는 것에 관해 아는 것

책임 할당#

  • 자율적인 객체를 만드는 가장 기본적인 방법은 책임을 수행하는 데 필요한 정보를 가장 잘 알고 있는 전문가에게 그 책임을 할당하는 것입니다. 이를 책임 할당을 위한 INFORMATION EXPERT(정보 전문가) 패턴이라고 합니다.

책임 주도 설계#

  • 책임을 찾고 책임을 수행할 적절한 객체를 찾아 책임을 할당하는 방식으로 협력을 설계하는 방법을 책임 주도 설계(Responsibility-Driven Design, RDD)라고 부릅니다.
  • 책임을 할당할 때 고려해야 하는 두 요소는 메시자가 객체를 고려하는 것과 행동이 상태를 결정한다는 것입니다.

메시지가 객체를 결정한다#

  • 객체를 선택해야 하는 두 가지 중요한 이유가 있습니다.
  • 첫째, 객체가 최소한의 인터페이스를 가질 수 있게 됩니다.
  • 둘째, 객체는 충분히 추상적인 인터페이스를 가질 수 있게 됩니다.

행동이 상태를 결정한다#

  • 객체는 협력에 필요한 행동을 제공해야 합니다.
  • 객체의 내부 구현에 초점을 맞춘 설계 방법을 데이터-주도 설계(Data-Drive Design) 이라고 부릅니다.

03. 역할#

역할과 협력#

  • 객체가 어떤 특정한 협력 안에서 수행하는 책임의 집합을 역할이라고 부릅니다.

유연하고 재사용 가능한 협력#

  • 역할은 다른 것으로 교체할 수 있는 책임의 집합입니다.

객체 대 역할#

  • 협력을 구체적인 객체가 아니라 추상적인 역할의 관점에서 설계하면 협력이 유연하고 재사용 가능해집니다.

역할과 추상화#

  • 추상화의 첫 번째 장점은 세부사항에 억눌리지 않고도 상위 수준의 정책을 쉽고 간단하게 표현할 수 있습니다.
  • 추상화의 두 번째 장점은 설계를 유연하게 마들 수 있다는 것입니다.

배우와 배역#

  • 협력이라는 문맥 안에서 역할은 특정한 협력에 참여해서 책임을 수행하는 객체의 일부입니다.
  • 동일한 객체라고 하더라도 객체가 참여하는 협력에 따라 객체의 얼굴은 계속해서 바뀌게 됩니다.
  • 객체는 다양한 역할을 가질 수 있습니다.
Last updated on