티스토리 뷰

반응형

역할, 책임, 협력(2)

역할, 책임, 협력은 객체 지향 시스템을 만드는 데 필요한 가장 중요한 재료이다.

 


들어가기에 앞서..

객체지향 시스템의 목적을 살펴보고 들어가자.

역할과 책임 속에서 사용자의 요구를 만족시킬 수 있는 기능을 제공하는 동시에 이해하기 쉽고, 단순하며, 유연한 상호작용을 제공하는 객체들의 공동체를 구축한 것이다.


 

협력

  • 협력은 다수의 연쇄적인 요청과 응답의 흐름으로 구성된다.

 

책임

  • 어떤 객체가 어떤 요청에 대해 대답해 줄 수 있거나, 적절한 행동을 할 의무가 있는 경우 해당 객체가 책임을 가진다고 말한다.
  • 즉, 어떤 대상에 대한 요청은 그 대상이 요청을 처리할 책임이 있음을 암시한다.
  • 객체의 책임은 객체가 무엇을 알고 있는가무엇을 할 수 있는가로 구성된다.
  • 객체의 책임은 일반적으로 외부에서 접근 가능한 공용 서비스의 관점에서 이야기 한다. 즉, 책임은 객체의 공용 인터페이스를 구성한다.

책임에서 하는것 과 아는 것

  • 하는 것
    • 객체를 생성하거나 계산을 하는 등의 스스로 하는 것
    • 다른 객체의 행동을 시작시키는 것
    • 다른 객체의 활동을 제어하고 조절하는 것
  • 아는 것
    • 개인적인 정보에 관해 아는 것
    • 관련된 객체에 관해 아는 것
    • 자신이 유도하거나 계산할 수 있는 것에 관해 아는 것

책임과 메시지

  • 두 객체간의 협력은 메시지를 통해 이뤄진다.
  • 책임과 메시지는 같지 않다.
    • 책임은 협력이라는 문맥 속에서 요청을 수신하는 객체 관점에서 무엇을 할 수 있는지 나열한 것이다.
    • 메시지는 협력에 참여하는 두 객체 사이의 관계를 강조한 것이다.
      • 메시지를 기반으로 상호협력이 가능한 것이다.
  • 객체지향 설계의 시작은 협력에 참여하기 위해 어떤 객체가 어떤 책임을 수행해야하고 어떤 객체로부터 메시지를 수신할 것인지를 결정하는 것부터 시작된다.

 

역할

  • 역할은 협력 내에서 다른 객체로 대체할 수 있음을 나타내는 일종의 표식이다.
  • 단, 역할을 대체하기 위해서는 각 역할이 수신할 수 있는 메시지를 동일한 방식으로 이해해야한다.
  • 또한, 동일한 역할을 수행할 수 있다는 것은 해당 객체들이 협력 내에서 동일한 책임의 집합을 수행할 수 있다는 것을 의미한다.
  • 역할은 객체지향 설계의 단순성, 유연성, 재사용성을 뒷받침하는 핵심개념이다.

 

협력의 추상화

  • 역할의 가장 큰 가치는 하나의 협력 안에 여러 종류의 객체(동일한 책임의 집합을 가진 객체)가 참여할 수 있게 함으로써, 협력을 추상화할 수 있다는 것이다.

    • Ex. [앨리스 이야기 in 법정] 왕 - 하얀토끼 - 요리사왕 - 하얀토끼 - 앨리스판사 - 하얀토끼 - 증인으로 인물들의 협력을 추상화한다.

대체 가능성

  • 역할은 협력 안에서 구체적인 객체로 대체될 수 있는 추상적인 협력자이다.
  • 객체가 역할을 대체하기 위해서는 협력 안에서 수행하는 모든 책임을 동일하게 수행할 수 있어야 한다.
  • 객체와 역할 사이의 일반화/특수화 관계
    • 일반적으로 객체는 역할이 암시하는 책임보다 더 많은 책임을 가질 수 있다.
    • 객체와 역할 사이에는 일반화/특수화 관계가 성립되는 것이 일반적이다.
      • 일반화 : 일반적인 왕의 일상
      • 특수화 : 재판할 때의 왕

 

 

객체의 모양을 결정하는 협력

  • 올바른 객체를 설계하기 위해서는 먼저 견고하고 깔끔한 협력을 설계해야한다.
  • 협력이라는 문맥에서 객체의 행동을 결정한 후 그 행동을 수행하는 데 필요한 데이터를 고민해야한다.
  • 클래스와 데이터는 협력과 책임의 집합이 결정된 후에야 등장한다.

 

객체지향 설계 기법

  • 객체지향 설계란, 애플리케이션 기능을 구현하기 위한 협력 관계를 고안하고, 협력에 필요한 역할과 책임을 식별한 후 이를 수행할 수 있는 적절한 객체를 식별해 나가는 과정이다.
  • 객체지향 설계의 핵심은 올바른 책임을 올바른 객체에게 할당하는 것이다.
  • 역할, 책임, 협력이 견고하고 유연한 객체지향 설계를 낳기위한 가장 중요한 토양이라는 사실을 알 것이다.

 

역할, 책임, 협력의 관점에서 유용한 설계 기법

  1. 책임-주도 설계

    • 협력에 필요한 책임들을 식별하고 적합한 객체에게 책임을 할당하는 방식이다.
  2. 디자인 패턴

    • 전문가들이 반복적으로 사용하는 해결 방법을 정의해 놓은 설계 템플릿 모음으로서, 역할, 책임, 협력의 모음이라고도 볼 수 있다.
  3. 테스트-주도 개발

    • 테스트를 먼저 작성하고 테스트를 통과하는 구체적인 코드를 추가하면서 완성해가는 방식이다.

 

책임-주도 설계

  • 객체가 책임을 수행하는 도중 필요한 정보나 서비스를 제공해줄 협력자(객체 또는 역할)를 찾아 해당 협력자에게 책임을 할당하는 순차적인 방식으로 객체들의 협력 공동체를 구축한다.
  • 개별적인 객체의 상태가 아니라 객체의 책임과 상호작용에 집중한다.

 

테스트-주도 개발

  • 테스트 주도 개발은 테스트를 작성하는 것이 아니라 책임을 수행할 객체의 역할이 메시지를 수신할 때 어떤 결과를 반환하고 그 과정에서 어떤 객체와 협력할 것인지에 대한 기대를 코드로 작성한 것이다.
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함