[객체지향] 책임주도 설계

Woo Yong·2023년 12월 14일
0

자바

목록 보기
1/4
post-thumbnail

객체지향 설계 및 모델링을 공부하면서 책임주도설계를 알게 되었다. 그리고 객체를 추출하고, 역할을 정의하는데 있어서 이해가 되지 않아 책임주도설계에 대해 정리하기 위해 해당 글을 작성하게 되었다.

책임 주도 설계

책임주도설계는 책임을 갖고 책임을 수행할 적절한 객체를 찾아 할당하는 방식으로 협력을 설계하는 것이다.

책임 주도 설계 핵심 3가지

협력

수행하는 책임들이 모여 객체가 수행하는 구성

책임

객체가 협력에 참여하기 위해 수행하는 로직(행동)

역할

객체들이 애플리케이션의 기능구현을 위해 수행하는 상호작용 -> 협력에서 수행하는 책임의 집합

책임 주도 설계 2가지 원칙

데이터보다 행동을 먼저 결정하라

-> 즉, 객체가 수행해야하는 책임이 무엇인지 생각해보라 / 책임을 수행하는 데 필요한 데이터를 생각해보라

협력이라는 문맥 안에서 책임을 결정하라

-> 협력은 객체들 간 상호작용을 통해 이루어지는 것을 말한다. 즉, 객체는 다른 객체의 메서드를 호출하거나 메시지를 보내어 상호작용합니다. 메시지를 받은 객체는 적절한 작업을 수행하고 결과를 반환하며 메시지를 보내어 협력을 이어나갑니다.
이처럼 객체들간 협력(상호작용)이 객체가 필요한 이유와 수행하는 동기를 제공한다.
그리고 협력을 시작하는 주체는 메시지 전송자이기 때문에 협력에 적합한 책임은 메시지 수신자 아니라 메시지 전송자에게 적합한 책임을 의미한다.
즉, 메시지 전송자의 관점에서 메시지 수신자가 깔끕하게 캡슐화되어야한다는 것이다.

책임주도설계 흐름

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

클래스 분리, 인터페이스 추출 기준

  • 반복되는 부분은 부모 객체로 뽑기
  • 라이프 사이클이 같은 데이터들은 하나의 객체로 뽑기
  • 비즈니스 로직이 복잡한 부분을 뽑아보고, 묶어보기
  • 도메인 지식이 낮은 경우 필드들 중에 관련성이 있는 애들 뽑아보기
    • 도메인 지식이 낮다?
      ->도메인은 특정 분야나 업무 영역을 가리키며, 프로젝트 주제나 사용자 요구사항에 대한 이해가 부족하다.
profile
Back-End Developer

0개의 댓글