본문 바로가기

Java/오브젝트 (교재)

3장. 역할, 책임, 협력

역할, 책임, 협력

객체지향 패러다임의 관점에서 핵심은 역할, 책임, 협력이다.


1. 협력

  • 협력이란?
    어떤 객체가 다른 객체에게 무언가를 요청하는 것
  • 실행 방식
    • 메시지 전송을 통해 실행
    • 메시지 전송은 객체 사이의 협력을 위한 유일한 통신 수단
  • 캡슐화
    객체를 자율적으로 만드는 가장 기본적인 방법은 내부 구현을 캡슐화하는 것
  • 예시 (Screening ↔ Movie 관계)
    • 예약 정보는 Screening에 저장
    • 예약을 위해 Movie가 Screening에 메시지를 전송
    • Screening의 프로퍼티를 직접 참조하지 않음

협력은 설계를 위한 문맥(context)을 결정한다.

객체에 행동과 상태를 할당하는 이유는 해당 객체가 특정 협력에 참여하기를 바라기 때문
협력에 필요한 적절한 행동을 가진 객체만이 참여할 수 있음


2. 책임

  • 책임이란?
    협력에 참여하기 위해 객체가 수행하는 행동
  • 책임의 두 범주
    1. 하는 것(Doing)
      • 객체 생성, 계산 수행 등 스스로 하는 일
      • 다른 객체의 행동을 시작하거나 제어
    2. 아는 것(Knowing)
      • 사적인 정보에 대한 지식
      • 관련 객체에 대한 정보
      • 스스로 유도·계산할 수 있는 정보
  • 예시
    • Screening 책임 → 영화 예매
    • Movie 책임 → 요금 계산

객체지향 개발에서 가장 중요한 능력은 책임을 적절한 객체에 할당하는 것

정보 전문가 패턴 (Information Expert)

  • 자율적인 객체를 만드는 기본 방법은 전문가 객체에 책임을 맡기는 것
  • 예:
    • 예약 요청 메시지 → 전문가인 Screening
    • 요금 계산 → 전문가인 Movie

책임 주도 설계 (Responsibility-Driven Design, RDD)

  1. 시스템이 제공해야 할 시스템 책임 파악
  2. 시스템 책임을 더 작은 책임으로 분할
  3. 분할된 책임을 수행할 적절한 객체 또는 역할 찾기
  4. 객체가 수행 도중 다른 객체의 도움이 필요하면, 그 책임을 수행할 객체 찾기
  5. 메시지가 객체를 결정
    • 필요한 메시지를 먼저 정의하고, 이를 처리할 객체를 선정
    • 최소한의 공개 인터페이스로 구현 가능
    • 추상적인 인터페이스 확보

행동이 상태를 결정한다.
객체지향의 실수: 상태에만 집중하고 행동을 놓치는 것 → 캡슐화 실패


3. 역할

  • 역할이란?
    특정 협력 내에서 객체가 수행하는 책임의 집합
  • 중요성
    • 유연하고 재사용 가능한 협력 구현
    • 역할을 고려하지 않으면 중복 코드 발생
  • 특징
    • 다른 것으로 교체 가능한 책임의 집합
    • 추상화를 통해 구현

역할 구현

  • 방법: 추상 클래스 또는 인터페이스 사용

객체 vs. 역할

  • 역할은 협력 참여 후보를 추상화한 개념
  • 협력을 추상적 역할 관점에서 설계하면 유연하고 재사용 가능

역할과 추상화의 장점

  • 세부 사항에 얽매이지 않고 상위 수준 정책을 표현
  • 설계를 유연하게 만듦

배우와 배역 비유

  • 배역: 연극 배우가 특정 연극에서 맡는 역할 (일시적 개념)
  • 연극 종료 후 배우는 배역에서 벗어남
  • 서로 다른 배우가 동일 배역을 연기 가능
  • 한 배우가 다양한 연극에서 서로 다른 배역을 연기 가능

'Java > 오브젝트 (교재)' 카테고리의 다른 글

2장. 객체지향 프로그래밍  (1) 2025.05.11
1장. 객체, 설계  (0) 2025.05.11