nyximos.log

[객체지향의 사실과 오해] 4. 역할, 책임, 협력 본문

Books

[객체지향의 사실과 오해] 4. 역할, 책임, 협력

nyximos 2024. 11. 12. 22:00
  • 협력이 객체의 행동 방식을 결정한다.

협력

어떤 객체가 도움을 요청하면 시작

책임

  • 어떤 객체가 어떤 요청에 대해 대답할수 있거나 적절한 행동을 할 의무가 있는 경우 해당 객체는 책임을 가진다.
  • 책임을 객체에 할당하는 것은 중요하다.
  • 책임의분류
    • 하는것
    • 아는것
  • 객체의 공용 인터페이스를 구성한다.

책임과 메시지

  • 한 객체가 다른 객체에게 요청을 전송 → 수신한 객체의 책임이 수행되어야 한다.
  • 메시지 전송 - 객체가 다른 객체에게 주어진 책임을 수행하게 한다.

역할

책임의 집합이 의미하는 것

협력의 추상화

대체 가능성

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

협력을 고려하고 클래스를 개발해야한다.

객체들이 주고받을 요청과 응답의 흐름을 결정해야한다.

→ 행동 결정 → 필요한 데이터 결정 → 클래스 구현 방법 결정

객체지향 설계 기법

역할, 책임, 협력의 관점에서 애플리케이션을 설계하는 세가지 기법

  1. 책임 주도 설계 Responsibility-Driven Design
    • 협력에 필요한 책임들을 식별하고 적합한 객체에 책임 할당
    • 객체의 상태가 아닌 책임과 상호작용에 집중
    • 시스템의 책임을 객체의 책임으로 변환
    • → 각 객체가 책임을 수행하는 중에 필요한 정보나 서비스를 제공해줄 협력자를 찾아 해당 협력자에게 책임을 할당
    1. 시스템이 사용자에게 제공해야하는 기능인 시스템 책임을 파악
    2. 시스템 책임을 더 작은 책임으로 분할
    3. 분할된 책임을 수행할 수 있는 적절한 객체/역할을 찾아 책임 할당
    4. 객체가 책임 수행하는 중 다른 객체의 도움이 필요한 경우 이를 책임질 적절한 객체/역할을 찾음
    5. 해당 객체 또는 역할에게 책임 할당 → 두 객체가 협력하게 함
  2. 디자인패턴
  3. 테스트 주도 개발 Test-Driven Development
    • 책임을 수행할 객체/클라이언트가 기대하는 객체의 역할이 메시지를 수신할때 어떤 결과를 반환하고 그 과정에서 어떤 객체와 협력할 것인지에 대한 기대를 코드 형태로 작성
    • 책임 : 객체의 메서드 호출, 반환값 검증
    • 협력 : 테스트에 필요한 간접 입력 값을 제공하기 위해 stub 추가, 간접 출력값을 검증하기 위해 mock object 사용