역할, 책임, 협력

bp.chys·2020년 3월 19일
2

OOP & Design Pattern

목록 보기
2/17

협력

  • 어떤 객체가 다른 객체에게 무엇인가를 요청하는 것
  • 한 객체는 어떤 것이 필요할 때 다른 객체에게 전적으로 위임하거나 서로 협력한다.
  • 즉, 두 객체가 상호작용을 통해 더 큰 책임을 수행하는 것이다.
  • 협력이 설계를 위한 문맥을 결정한다.
  • 상태는 객체가 행동하는 데 필요한 정보에 의해 결정되고, 행동은 협력 안에서 객체가 처리할 메시지로 결정된다.
  • 따라서 협력은 객체를 설계하는데 필요한 일종의 문맥(context)를 제공한다.

책임

  • 객체에 의해 정의되는 응집도 있는 행위의 집합이자, 객체가 유지해야 하는 정보와 수행할 수 있는 행동에 대해 개략적으로 서술한 문장을 책임이라고 한다.
  • 책임은 메시지보다 추상적이고 개념적으로도 더 크다.
  • 객체 지향 설계에서 책임을 얼마나 적절한 객체에게 할당하느냐가 설계의 전체적인 품질을 결정한다.

책임 주도 설계

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

메시지가 객체를 결정

  • 객체가 최소한의 인터페이스를 가질 수 있게 된다.
  • 객체는 충분히 추상적인 인터페이스를 가질 수 있게 된다.
  • 객체가 충분히 추상적이면서 미니멀리즘을 따르는 인터페이스를 가지게 하고 싶다면 메시지가 객체를 선택하게 하자.

역할

  • 객체가 어떤 특정한 협력 안에서 수행하는 책임의 집합을 역할이라 한다.
  • 협력이라는 문맥 안에서 필요한 책임을 추렸다면, 해당 책임을 가지고 있어야 할 역할이 무엇인지 개념을 뽑아내고 그 다음에 역할에 맞는 이름을 부여하여 클래스로 만든다.

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

  • 역할을 통해 유연하고 재사용 가능한 협력을 얻을 수 있다.
  • 역할에 집중하면 추상적인 네이밍을 가져도 문맥은 유지가 되고, 비슷한 구현의 다른 객체를 추가하는데 큰 비용이 들지 않는다.
  • 객체에게 중요한 것이 행동임은 변함이 없다. 역할은 동일한 협력을 수행하는 객체들을 추상화할 수 있다.

결론

객체 지향 프로그래밍에서 객체는 하나의 책임을 가진 역할로서 협력에 참여하여 소프트웨어의 목적을 달성한다.
책임은 메시지보다 더 큰 개념으로 객체가 직접 수행하는 행동들에 대한 추상적이고 응집도 있는 집합이라고 할 수 있다. 개발을 할 때는 아래와 같이 협력 관계를 먼저 파악하고 필요한 책임들을 추린 뒤, 역할별로 객체를 설계하면 된다. 객체의 상태(데이터)를 기반으로 설계하는 것은 올바른 역할을 추리지 못할 가능성이 높다.

협력(Collaboration) 👉 책임(Responsibility) 👉 역할(Role) 👉 객체(object) 👉 클래스(class)


참고자료

  • NHN 기술세미나, 객체지향 입문 - 최범균
  • 오브젝트 - 조영호
profile
하루에 한걸음씩, 꾸준히

0개의 댓글