Skip to content

Latest commit

 

History

History
113 lines (66 loc) · 5.68 KB

CH04_역할,책임,협력.md

File metadata and controls

113 lines (66 loc) · 5.68 KB

CH 04 역할, 책임, 협력

  • 어떤 협력에 참여하는지가 객체에 필요한 행동을 결정하고, 필요한 객체의 상태를 결정한다.
  • 개별적인 객체의 행동이나 상태가 아니라 객체들 간의 협력에 집중하라

협력

  • 협력은 다수의 요청과 응답으로 구성되며, 전체적으로 다수의 연쇄적인 요청과 응답의 흐름으로 구성된다.
    • 스스로 해결하기 힘든것을 누군가에게 도움을 요청하기 때문
  • 객체지향의 세계는 동일한 목적을 달성하기 위해 협력하는 객체들의 공동체

책임

  • 어떤 객체가 어떤 요청에 대해 대답을 해줄 수 있거나, 적절한 행동을 할 의무가 있는 경우 해당 객체가 책임을 가진다라고 말한다.

책임의 분류

  • 협력에 참여하는 객체들은 목표를 달성하는데 필요한 책임을 수행
  • 객체의 책임은 '객체가 무엇을 알고 있는가(knowing)'와 '무엇을 할 수 있는가(doing)'로 구성된다.
  • 두가지 범주
    • 하는것(doing)
      • 객체를 생성하거나 계산을 하는 등의 스스로 하는것
      • 다른 객체의 행동을 시작시키는 것
      • 다른 객체의 활동을 제어하고 조절하는것
    • 아는것(knowing)
      • 개인적인 정보에 관해 아는것
      • 관련된 객체에 관해 아는것
      • 자신이 유도하거나 계산할 수 있는것에 관해 아는것
  • 책임은 객체의 외부에 제공해 줄 수 있는 정보(아는 것 측면)와 외부에 제공해 줄 수 있는 서비스(하는 것 측면)의 목록이다.
    • 따라서 책임은 객체의 공용 인터페이스를 구성한다. (캡슐화와 이어짐)

책임과 메시지

  • 협력 안에서 객체는 다른 객체로 부터 요청이 전송됐을 경우에만 자신에게 주어진 책임을 수행

    • 메시지는 협력을 위해 한 객체가 다른 객체로 접근할 수 있는 유일한 방법
  • 용어정리

    • 메시지 전송 : 다른 객체에게 주어진 책임을 수행하도록 요청
    • 송신자 : 메시지 전송함으로써 협력을 요청하는 객체
    • 수신자 : 메시지를 받아 처리하는 객체
  • 메시지는 협력에 참여하는 두 객체 사이의 관계를 강조한 것이다.

  • 주의할점

    • 책임과 메시지의 수준이 같지 않다.
    • 책임은 객체가 협력에 참여하기 위해 수행해야 하는 행위를 상위 수준에서 개략적으로 서술
    • 책임을 결정한 후 실제로 협력을 정제하면서 이를 메시지로 변환할 때는 하나의 책임이 여러 메시지로 분할되는 것이 일반적이다.
  • 객체 지향 설계는 협력에 참여하기 위해 어떤 객체가 어떤 책임을 수행해야하고 어떤 객체로 부터 메시지를 수신할 것인지를 결정하는 것으로부터 시작

    • 어떤 클래스가 필요하고 어떤 메서드를 포함하는지는 나중에

역할

  • 역할을 사용하면 여러가지 협력을 모두 포괄할 수 있는 하나의 협력으로 추상화 할 수 있다.

    • 해당 역할을 수행할 수 있는 어떤 객체라도 대신할 수 있다

    • 역할을 대체할 수 있는 객체는 동일한 메시지를 이해할 수 있는 객체

  • 동일한 역할을 수행하는 객체들이 동일한 메시지를 수신할 수 있기 때문에 동일한 책임을 수행할 수 있다.

  • 어떤 객체가 수행하는 책임의 집합은 객체가 협력 안에서 수행하는 역할을 암시

협력의 추상화

  • 역할하나의 협력 안에 여러 종류의 객체가 참여할 수 있게 함으로써 협력을 추상화하고 단순화할 수 있다.

협력에 따라 흐르는 객체의 책임

  • 협력을 설계한다는 것은 객체들이 주고받을 요청과 응답의 흐름을 결정한다는것
    • 각 객체의 상태와 행위에 대해 고민하기전 문맥인 협력을 정의하자.
    • 이렇게 결정된 요청과 응답의 흐름은 객체가 협력에 참여하기 위해 수행될 책임
  • 일단 객체에 책임을 할당하고 나면 책임은 객체가 외부에 제공하게될 행동이 됨
  • 행동을 결정한 후에 그 행동을 수행하는데 필요한 데이터를 고
  • 그 후 클래스의 구현 방법을 결정

책임-주도 설계

  • 객체의 역할, 책임, 협력을 고안하기 위한 방법과 절차 제시
    • 디자인 패턴은 결과물

디자인패턴

  • 디자인 패턴?

    • 유사한 상황에서 반복적으로 적용할 수 있는 책임-주도 설계의 결과물
    • 공통으로 사용할 수 있는 역할, 책임, 협력의 템플릿
    • 특정 상황에 적용 가능한 디자인 패턴을 알고 있다면 책임-주도 설계의 절차를 순차적으로 따르지 않아도됨

테스트 주도 개발

  • 테스트를 작성하는 것이 아니라 책임을 수행할 객체 또는 클라이언트가 기대하는 역할메시지를 수신할 때 어떤 결과를 반환하고 그 과정에서 어떤 객체와 협력할 것인지에 대한 기대를 코드형태로 작성하는것
  • 객체지향에 대한 깊이있는 지식 요구
    • 객체의 메서드를 호출하고 반환값 검증하는 것은 수행해야될 책임에 관해 생각한것
    • 스텁 추가하거나 목객체 사용하는 것은 객체와 협력해야하는 협력자에 관해 고민한 결과를 코드로 표현한것
  • 테스트 주도 개발은 책임-주도 설계 기본 개념과 다양한 원칙과 프랙티스, 패턴을 종합적으로 이해해야 적용할 수 있는 기법