오브젝트 - 3장 역할, 책임,협력

yshjft·2023년 2월 11일
0

오브젝트

목록 보기
3/18

객체지향 패러다임의 관점에서 핵심은 역할(role), 책임(responsbility), 협력(collaboration)

01 협력

영화 예매 시스템 돌아보기

  • 객체지향 원칙을 따르는 어플리케이션
    • 제어의 흐름이 객체들 사이에 균형 있게 분배
  • 상호작용 = 협력
  • 수행하는 로직 = 책임
  • 책임들이 모여 객체 수행하는 역할을 구성

협력

  • 메시지 전송(message sending)
    • 객체 사이의 협력을 위해 사용할 수 있는 유일한 커뮤니케이션 수단
  • 협력 = 다른 객체에게 무언가를 요청하는 것
  • 메시지를 수신한 객체는 메서드를 실행해 요청에 응답
    • 객체가 자신의 일을 스스로 처리할 수 있는 존재라는 것을 의미
  • 자율적인 객체
    • 자신의 상태를 직접 관리
    • 스스로의 결정에 따라 행동
    • 캡슐화를 통해 자율적인 객체를 만들 수 있다.
    • 책임을 수행하던 중 필요한 정보를 외부의 적절한 객체에 메시지를 전송해 협력을 요청한다.

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

  • 협력
    • 객체가 필요한 이유와 객체가 수행하는 행동의 동기를 제공
    • 협력이 존재하기 때문에 객체가 존재하는 것
    • 객체의 해동과 상태를 결정
    • 협력은 객체를 설계하는 데 필요한 문맥(context)을 제공

02 책임

책임이란 무엇인가

  • 협력에 참여하기 위해 객체가 수행하는 행동
  • 응집도 있는 행위의 집합
    • '하는 것' + '아는 것'
  • 책임이 외부의 인터페이스와 내부의 속성을 결정

책임 할당

  • 객체에게 책임을 할당하기 위해서 협력이라는 문백을 정의 해야 한다.
  • 기능을 시스템이 담당할 하나의 책임
  • 객체지향 설계는 협력에 필요한 메시지를 찾고 메시지에 적절한 객체를 선택하는 반복적인 과정

책임 주도 설계(Responsibility-Driven Design, RDD)

  • 책임 파악
  • 책임 분할
  • 책임 할당
  • 도움이 필요한 경우 이를 책임질 객체 또는 역할을 찾는다.
  • 두 객체가 협력하게 한다.

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

  • 메시지가 객체를 선택
  • 최소한의 인터페이스
    • 꼭 필요한 퍼블릭 인터페이스를 가질 수 있다.'
  • 추상적인 인터페이스
    • 어떻게 수행하는지를 노출해서는 안됨
    • 무엇을 수행할지에 초점을 맞춘다.

행동이 상태를 결정한다.

  • 행동이 객체를 객체 답게 만든다.
  • 행동이 중요하다.
    • 무엇을 제공하고 무엇을 얻어야 하는지 고민해야 한다.

03 역할

역할과 협력

  • 역할
    • 협력 안에서 수행하는 책의 집합
    • 실제 모델링 시 역할에게 책임을 할당하게 된다.

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

  • 역할을 통해 재사용 가능한 협력을 얻을 수 있다.
  • 역할은 일종의 객체를 바꿔 낄 수 있는 '슬롯'
  • 역할을 통해 추상화 할 수 있다.

객체 대 역할

  • 역할은 협력 안에서 각자의 위치를 가지는 객체들에 대한 별칭
  • 처음부터 어떤 것이 역할이고 어떠 것이 객체인지 또렷하게 알 수 없다.
    • 따라서 단순하게 객체로 시작하여 반복적으로 책임과 협력을 정제해가면서 필요한 순간에 객체로부터 역할을 분리해내자
  • 협력을 추상적인 역할의 관점에서 설계하면 협력이 유연하고 재사용이 가능해진다.

역할과 추상화

  • 추상화의 장점
    • 세부 사항에 억눌리지 않고도 상위 수준의 정책을 쉽고 간단하게 표현 가능
    • 설계를 유연하게 만들 수 있다.

배우와 배역

  • 협력 = 연극
  • 객체는 협력이라는 실행 문맥 안에서 특정한 역할을 수행
  • 역할은 잠시동안에만 존재하는 일시적인 개념
    • 객체 역시 여러 협력에 참여하며 다양한 역할 수행할 수 있다.
  • 객체는 다수의 역할을 보유할 수 있지만 객체가 참여하는 특정 협력은 객체의 한 가지 역할만 바라볼 수 있다.
profile
꾸준히 나아가자 🐢

0개의 댓글