객체지향의 역할, 책임, 그리고 협력 쉽게 이해하기
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
개발 툴
대상자
소프트웨어 개발자(초보~중급), 객체지향 설계 원리 이해 및 실무 적용을 원하는 개발자
핵심 요약
- 협력은 객체 간 메시지 주고받으며 공동 목표를 달성하는 상호작용 과정이다.
- 역할은 협력 내에서 객체가 수행해야 할 기대되는 임무의 집합이며, 객체의 구체적 타입과 무관하게 정의된다.
- 책임은 객체가 수행해야 할 행동(Doing) 또는 정보(Knowing)이며, 캡슐화와 협력의 일관성을 보장한다.
섹션별 세부 요약
- 협력의 정의
- 협력은 시스템의 공동 목표를 달성하기 위해 객체 간 메시지 교환을 통해 이루어지는 과정이다.
- 예: '커피 주문하기'는 손님, 캐시어, 바리스타의 협력을 통해 이루어진다.
- 협력의 중요성
- 문제 해결: 복잡한 작업을 분할해 효율적으로 처리.
- 유연성: 객체의 내부 구현 변경 시 다른 객체에 미치는 영향 최소화.
- 재사용성: 협력 구조를 다른 시스템에 적용 가능.
- 역할의 정의와 중요성
- 역할은 협력 내에서 기대되는 행동으로, 객체의 구체적 타입과 무관하게 정의된다.
- 예: 캐시어 역할은 '주문 받기', '결제 처리' 등 여러 책임을 포함.
- 유연성: 동일한 역할을 수행하는 다른 객체로 쉽게 대체 가능.
- 책임의 정의와 중요성
- 행동(Doing): 객체가 수행해야 할 구체적 작업 (예: 캐시어가 주문 처리).
- 정보(Knowing): 객체가 알고 있어야 할 데이터 (예: 바리스타가 커피 레시피를 안다).
- 캡슐화: 내부 구현은 외부에 숨겨져야 하며, 협력의 일관성 유지.
- 역할과 책임 할당의 예시
- 손님: 주문 결정, 결제, 커피 수령.
- 캐시어: 주문 처리, 결제, 바리스타와의 전달.
- 바리스타: 커피 제조, 완제품 전달.
- 과도한 책임: 손님이 커피 제조까지 맡으면 역할 분리 실패로 시스템 복잡화.
- 협력, 역할, 책임의 관계
- 협력 → 역할 도출 → 책임 할당 순서로 설계.
- 예: '날기' 역할은 장난감 오리에게 부적합, '수영하기' 역할은 두 오리 모두 수행 가능.
결론
- *객체지향 설계의 핵심은 협력 정의 → 역할 도출 → 책임 할당의 순서를 따르는 것이다. 협력의 맥락에 따라 역할과 책임이 결정되므로, 설계 시 협력의 문맥을 먼저 고려**해야 한다. 예시를 통해 보았듯, 책임 분리 실패는 시스템 유지보수를 어렵게 만들 수 있으므로, 각 객체의 역할과 책임을 명확히 정의하는 것이 중요하다.