3장 - HONGDAE-OBJECT/OOP GitHub Wiki

3 역할, 책임, 협력

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

객체들이 기능 구현을 위해 수행하는 상호작용협력이라 한다.

객체가 협력에 참여 하기 위해 수행하는 로직책임이라한다.

협력안에서 수행하는 책임들이 모여 객체가 수행하는 행위역할이라 한다.

클래스, 상속, 지연 바인딩 역시 중요하나 구현에 치우쳐 있기 때문에 객체지향 패러다임과는 거리가 있다.

객체 지향의 본질은 협력하는 객체들의 공동체 창조이다.

01 협력

두 객체 사이에 협력은 하나의 객체가 다른 객체에게 도움을 요청 할 때 시작 된다.

메시지 전송은 객체 사이의 협력을 위해 사용 할 수 있는 유일한 커뮤니케이션 수단이다.

메세지를 수신한 객체는 메서드를 실행에 요청에 응답한다.

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

상태는 객체가 행동하는 데 필요한 정보에 의해 결정 되고 행동은 협력 안에서 객체가 처리 할 메세지로 결정 된다.

결과적으로 객체가 참여 하는 협력이 객체를 구성하는 행동과 상태 모두를 결정한다.

따라서 협력은 객체를 설계 하는 데 필요한 일종의 문맥을 제공한다.

02 책임

책임이란 객체에 의해 정의되는 응집도 있는 행위의 집합으로 크게 하는 것아는 것의 두가지 범주로 나눌 수 있다.

하는 것

  • 객체를 생성하거나 계산을 수행등 스스로 하는 것
  • 다른 객체의 행동을 시작 시키는 것
  • 다른 객체의 활동을 제어 및 조절 하는 것

아는 것

  • 사적인 정보에 관해 아는 것
  • 관련 된 객체에 관해 아는 것
  • 자신이 유도하거나 개선할 수 있는 것에 관해 아는 것

여기서 중요한 것은 하는 것과 아는 것은 밀접한 연관이 있다는 것

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

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

책임 할당

자율적인 객체를 만드는 가장 기본적인 방법은 전문가에게 그 책임을 할당 하는 것이다.

이를 책임 할당을 위한 정보 전문가 패턴이라고 부른다.

정보 전문가에게 책임을 할당하는 방법

  1. 예매하라 라는 이름의 메세지 전송

  2. 적절한 객체 선택 및 책임 할당

  3. 새로운 메세지 전송

  4. 적절한 객체 선택 책임 할당

모든 책임 할당이 이렇게 단순한 것은 아니다.

어떤 경우에는 정보전문가가아닌 객체에게 책임 할당하는 방법도 있지만 기본적으로는 정보전문가에게 할당 하는 것이 자율적인 객체가 될 가능성이 높다.

책임 주도 설계

책임을 찾고 책임을 수행할 적절한 객체를 찾아 책임을 할당 하는 방식으로 협력을 설계하는 방법을 책임 주도 설계라고 부른다.

다음은 책임 주도 설계 방법의 과정을 정리한 것이다.

  • 시스템이 사용자에게 제공해야 하는 기능인ㄴ 시스템 책임을 파악한다.
  • 시스템 책임을 더 작은 책임으로 분할한다.
  • 분항 된 책임을 수행할 수 있는 적절한 객체 또는 역할을 찾아 책임을 할당한다.
  • 책체가 책임을 수행하는 도중 다른 객체의 도움이 필요한 경우 이를 책임질 객체 또는 역할을 찾는다.
  • 해당 객체 또는 역할에게 책임을 할당함으로써 두 객체가 협력하게 된다.

03역할

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

실제로 협력을 모델링 할 때는 특정한 객체가 아니라 역할에게 책임을 할당한다고 생각하는 것이 좋다.

역할이 중요한 이유는 역할을 통해 유연하고 재사용 가능한 협력을 얻을 수 있기 때문이다.

역할을 이용하면 불필요한 중복 코드를 제거 할 수 있고 더 유연하게 코드를 짤 수 있다.

따라서 책임과 역할을 중심으로 협력을 바라보는 것이 바로 변경과 확장이 용이한 유연한 설계로 나아 갈 수 있는 첫 걸음이다.