역할, 책임, 협력
객체지향 패러다임의 관점에서 핵심은 역할, 책임, 협력이다.
1. 협력
- 협력이란?
어떤 객체가 다른 객체에게 무언가를 요청하는 것 - 실행 방식
- 메시지 전송을 통해 실행
- 메시지 전송은 객체 사이의 협력을 위한 유일한 통신 수단
- 캡슐화
객체를 자율적으로 만드는 가장 기본적인 방법은 내부 구현을 캡슐화하는 것 - 예시 (Screening ↔ Movie 관계)
- 예약 정보는 Screening에 저장
- 예약을 위해 Movie가 Screening에 메시지를 전송
- Screening의 프로퍼티를 직접 참조하지 않음
협력은 설계를 위한 문맥(context)을 결정한다.
객체에 행동과 상태를 할당하는 이유는 해당 객체가 특정 협력에 참여하기를 바라기 때문
협력에 필요한 적절한 행동을 가진 객체만이 참여할 수 있음
2. 책임
- 책임이란?
협력에 참여하기 위해 객체가 수행하는 행동 - 책임의 두 범주
- 하는 것(Doing)
- 객체 생성, 계산 수행 등 스스로 하는 일
- 다른 객체의 행동을 시작하거나 제어
- 아는 것(Knowing)
- 사적인 정보에 대한 지식
- 관련 객체에 대한 정보
- 스스로 유도·계산할 수 있는 정보
- 하는 것(Doing)
- 예시
- Screening 책임 → 영화 예매
- Movie 책임 → 요금 계산
객체지향 개발에서 가장 중요한 능력은 책임을 적절한 객체에 할당하는 것
정보 전문가 패턴 (Information Expert)
- 자율적인 객체를 만드는 기본 방법은 전문가 객체에 책임을 맡기는 것
- 예:
- 예약 요청 메시지 → 전문가인 Screening
- 요금 계산 → 전문가인 Movie
책임 주도 설계 (Responsibility-Driven Design, RDD)
- 시스템이 제공해야 할 시스템 책임 파악
- 시스템 책임을 더 작은 책임으로 분할
- 분할된 책임을 수행할 적절한 객체 또는 역할 찾기
- 객체가 수행 도중 다른 객체의 도움이 필요하면, 그 책임을 수행할 객체 찾기
- 메시지가 객체를 결정
- 필요한 메시지를 먼저 정의하고, 이를 처리할 객체를 선정
- 최소한의 공개 인터페이스로 구현 가능
- 추상적인 인터페이스 확보
행동이 상태를 결정한다.
객체지향의 실수: 상태에만 집중하고 행동을 놓치는 것 → 캡슐화 실패
3. 역할
- 역할이란?
특정 협력 내에서 객체가 수행하는 책임의 집합 - 중요성
- 유연하고 재사용 가능한 협력 구현
- 역할을 고려하지 않으면 중복 코드 발생
- 특징
- 다른 것으로 교체 가능한 책임의 집합
- 추상화를 통해 구현
역할 구현
- 방법: 추상 클래스 또는 인터페이스 사용
객체 vs. 역할
- 역할은 협력 참여 후보를 추상화한 개념
- 협력을 추상적 역할 관점에서 설계하면 유연하고 재사용 가능
역할과 추상화의 장점
- 세부 사항에 얽매이지 않고 상위 수준 정책을 표현
- 설계를 유연하게 만듦
배우와 배역 비유
- 배역: 연극 배우가 특정 연극에서 맡는 역할 (일시적 개념)
- 연극 종료 후 배우는 배역에서 벗어남
- 서로 다른 배우가 동일 배역을 연기 가능
- 한 배우가 다양한 연극에서 서로 다른 배역을 연기 가능
'Java > 오브젝트 (교재)' 카테고리의 다른 글
| 2장. 객체지향 프로그래밍 (1) | 2025.05.11 |
|---|---|
| 1장. 객체, 설계 (0) | 2025.05.11 |