오브젝트

Ch03. 객체지향 기본 원칙 - 책임 주도 설계

webmaster 2024. 10. 1. 21:21
728x90

객체를 설계하기 위해서는 협력에 필요한 행동을 제일 먼저 결정하고 행동을 수행하기에 적합한 객체를 선택한 후에 객체의 행동을 구현하는데 필요한 데이터를 나중에 선택해야 한다. 

객체지향 설계 흐름

  1. 하나의 객체를 설계하기 위해서는 우선 설계를 위한 문맥이 필요하다(협력을 위한 문맥 결정)
    •  객체가 다른 객체와 협력하기 위해 보내는 요청을 객체를 설계하기 위한 문맥으로 활용
  2. 요청을 처리하기 위한 책임을 결정(필요한 책임 식별)
  3. 책임을 수행하는데 적합한 객체를 선택(책임 수행 객체 선택)
  4. 객체 안에 책임을 부여(책임 구현)
    • 클래스와 메서드를 이용해서 구현
  5. 책임을 부연하는데 필요한 데이터를 결정하고 클래스의 필드로 정의(데이터 결정)

책임

객체지향에서의 책임

  • 객체지향에서는 협력에 참여하기 위해 한 객체가 다른 객체에게 제공하는 행동을 책임이라고 한다.
  • DiscountPolicy는 할인 요금을 계산하는 책임을 DiscountCondition은 할인 여부를 판단하는 책임을 가진다.
  • 객체가 수행할 책임을 기반으로 객체와 객체 사이의 협력을 설계하는 방식을 책임 주도 설계 방법이라고 부른다.
  • 객체가 외부에 제공해야 하는 카테고리
    • 하는 것
      • 객체를 생성하거나 계산을 하는 등의 스스로 하는 것
      • 다른 객체의 행동을 시작시키는 것
      • 다른 객체의 활동을 제어하고 조절하는 것
    • 아는 것
      • private로 캡슐화된 상태(데이터)에 관해 아는 것
      • 관련된 객체에 관하여 아는 것
      • 자신이 유도하거나 계산할 수 있는 것에 관하여 아는 것

책임이 중요한 이유는 객체의 구현이 아니라 객체 사이의 협력에 초점을 맞출 수 있도록 해주기 때문이다. 책임 관점에서 객체를 설계하면, 객체 내부의 세부 사항에 대한 결정은 뒤로 미루고 외부에 제공해야 하는 행동을 먼저 결정할 수 있게 해준다.

 

협력을 설계하는데 필요한 문맥

  • 객체지향에서는 시스템이 외부에 제공해야 하는 기능을 협력을 위한 문맥으로 사용한다.
  • 객체지향 설계에서는 시스템이 제공해야 하는 기능을 시스템에 전달된 요청으로 간주하는데, 이 요청을 수행할 적합한 객체를 결정하는 일을 시작으로 기능을 구현하는데 필요한 객체들을 협력을 설계하면 된다.
  • 객체지향에서는 애플리케이션의 기능을 기반으로 객체들 사이의 협력을 설계한다

책임 주도 설계

책임 주도 설계

아래 과정을 반복하면서 시스템 기능을 설계하는 방식을 책임 주도 설계 방식이라고 한다.

  1. 애플리케이션이 제공할 기능 파악
  2. 애플리케이션의 기능 요구사항을 시스템의 책임으로 변환
  3. 시스템의 책임을 객체의 책임으로 변환
  4. 책임을 담당할 적절한 객체 선택
  5. 객체의 책임 일부를 수행하기 위해 외부의 도움이 필요하다면 다른 객체에게 도움을 요청
  6. 이 요청을 또 다른 객체의 책임으로 변환
  7. 책임을 담당할 적절한 객체 선택

책임 주도 설계에서 가장 중요하면서 어려운 일은 책임을 할당할 적합한 객체를 선택하는 것이다. 객체지향 설계는 런타임에 실제로 동작하는 객체 사이의 협력을 먼저 설계한 뒤, 이 협력을 실현하는데 필요한 클래스를 구현하는 순서로 진행해야 한다.

 

책임 주도 설계에서의 문맥: 애플리케이션의 기능이 협력을 위한 문맥을 제공하며, 협력이 책임을 위한 문맥을 제공한다. 이처럼 문맥을 제한하면 수정이 용이하며, 유지보수 하기 좋은 애플리케이션을 작성할 수 있다.

728x90