본문 바로가기
스터디/오브젝트

3장 - 협력, 책임, 역할

by 검은도자기 2023. 3. 12.

개요

이번 장에서는 객체지향 프로그래밍에서 핵심 개념인 협력, 책임, 역할에 대해 간단히 소개하고 왜 중요한지에 대해 다룹니다.

 

 

협력이란?

  • 앱의 기능을 구현하기 위해 어떤 객체가 다른 객체에게 무엇인가를 요청하는 것을 협력이라 합니다.
  • 객체지향에서는 한 객체는 어떤 것(기능 or 데이터)이 필요할 때 다른 객체에게 위임하거나 서로 협력하여 앱의 기능을 개발합니다.

 

왜 다른 객체에게 처리를 위임을 할까?

  • 하나의 객체가 모든 요구사항이나 변경사항을 처리하게 되면, 다른 객체들과의 결합도가 높아져 유지보수가 어려워집니다.
  • 따라서 다른 객체에게 처리를 위임함으로써 객체 간의 의존성이 낮아지며 유지보수가 용이해집니다.

 

협력이 설계를 위한 문맥을 결정한다.

  • 객체는 상태와 행동을 함께 캡슐화하여 실행 단위를 구성합니다.
  • 객체의 상태는 객체가 행동하는 데 필요한 정보에 따라 결정되며, 객체의 행동은 협력 관계에서 처리할 메시지에 따라 결정됩니다.
  • 따라서 객체가 참여하는 협력 관계가 객체를 구성하는 행동과 상태 모두를 결정합니다.
  • 이러한 협력 관계는 객체를 설계하는 데 필요한 일종의 문맥을 제공합니다.

 

 

책임이 무엇일까?

  • 객체를 설계하기 위해서는 협력이 필요한 문맥을 고려해야 합니다.
  • 이때, 협력에 참여하기 위해 객체가 수행하는 행동을 책임이라고 부릅니다.
  • 책임은 객체가 ‘무엇을 알고 있는가’와 ‘무엇을 할 수 있는가’로 구성됩니다.

 

아는 것

  • 사적인 정보에 관해 아는 것
  • 관련된 객체에 관해 아는 것
  • 자신이 유도하거나 계산할 수 있는 것에 관해 아는 것

 

하는 것

  • 객체를 생성하거나 계산을 수행하는 등의 스스로 하는 것
  • 다른 객체의 행동을 시작시키는 것
  • 다른 객체의 활동을 제어하고 조절하는 것

 

그래서 어떻게 책임을 할당하면 좋을까?

  • 책에서 소개하는 방법은 책임 주도 설계를 이용하여 책임을 할당하는 방법을 소개하고 있습니다.

 

책임 주도 설계(RDD)가 뭘까?

  • 책임을 찾고 책임을 수행할 적절한 객체를 찾아 책임을 할당하는 방식으로 협력을 설계하는 방법을 말합니다.

 

책임 주도 설계 과정

  1. 요구사항 파악: 시스템이 가져야 할 요구사항을 파악합니다.
  2. 요구사항 분석: 요구사항을 바탕으로 시스템이 가져야 할 책임을 분석합니다.
  3. 책임 식별: 시스템이 가져야 할 책임을 식별합니다.
  4. 책임 할당: 식별된 책임을 객체에게 할당합니다.
  5. 메시지 정의: 객체 간의 협력을 위한 메시지를 정의합니다.
  6. 객체 구현: 메시지를 처리하는 객체를 구현합니다.
  7. 객체 간 협력 구현: 객체 간의 협력을 구현합니다.
  8. 반복: 위 과정을 반복하여 시스템을 구축합니다.

 

 

역할이 무엇일까?

  • 객체가 어떤 특정한 협력 안에서 수행하는 책임의 집합을 역할이라고 부릅니다.

 

왜 역할이 필요할까?

  • 역할을 통해 유연하고 재사용 가능한 협력을 얻을 수 있기 때문입니다.
  • 역할을 고려하지 않고 객체에게 책임을 할당할 경우 동일한 책임을 수행하는 협력을 개별적으로 만들어야 하며, 이는 코드 중복의 문제가 발생합니다.
  • 역할을 사용하면 두 개의 협력을 하나로 통합하여 중복 코드를 제거하여 좀 더 유연하게 코드를 작성할 수 있습니다.

 

어떻게 역할을 할당할까?

  • 어떤 협력에서 책임을 수행하는 대상이 한 종류라면 간단하게 객체로 간주하며, 하나 이상의 객체가 동일한 책임을 수행할 수 있다면 역할은 서로 다른 방법으로 실행할 수 있는 책임의 집합이 됩니다.

 

언제 역할을 사용해야 할까?

  • 설계 초반에는 적절한 책임과 협력의 큰 그림을 탐색하는 것이 가장 중요한 목표여야 하고 역할과 객체를 명확하게 구분하는 것은 그렇게 중요하지는 않습니다.
  • 따라서 애매하다면 단순하게 객체로 시작하고 반복적으로 책임과 협력을 정제해 가면서 필요한 순간에 객체로부터 역할을 분리해 내는 것이 가장 좋은 방법입니다.
  • 프레임워크나 디자인 패턴과 같이 재사용 가능한 코드나 설계 아이디어를 구성하는 핵심적인 요소가 바로 역할입니다.

 

 

마무리

오늘은 오브젝트 책 3장을 스터디하면서 중요하다고 생각한 부분을 정리해 보았습니다.

3장을 읽고 나니 왜 필요하고 언제 사용하면 좋을지에 대해 명확하게 알게 되었습니다.

하지만 어떻게 사용하면 좋을지에 대한 내용이 부족한 것 같아서 좀 아쉬운 장이라고 생각이 드네요.

이번 포스팅은 마무리하면서 다음 포스팅에서 뵙겠습니다.

 

 

참고

http://www.yes24.com/Product/Goods/74219491

 

오브젝트 - YES24

역할, 책임, 협력을 향해 객체지향적으로 프로그래밍하라!객체지향으로 향하는 첫걸음은 클래스가 아니라 객체를 바라보는 것에서부터 시작한다. 객체지향으로 향하는 두번째 걸음은 객체를

www.yes24.com

 

'스터디 > 오브젝트' 카테고리의 다른 글

6장 - 메시지와 인터페이스  (0) 2023.04.17
5장 - 책임 할당하기  (0) 2023.04.10
4장 - 설계 품질과 트레이드오프  (0) 2023.03.28
2장 - 협력, 객체, 클래스  (0) 2023.03.05
1장 - 객체, 설계  (0) 2023.02.26