Code/OOP

[객체지향의 사실과 오해] 1. 협력하는 객체들의 공동체

noahkim_ 2025. 4. 2. 02:10

조영호 님의 "객체지향의 사실과 오해" 책을 정리한 글입니다.

 

1. 객체

  • 현실 세계의 사물을 추상화한 개념
  • 상태(State)와 행동(Behavior)을 함께 지닌 자율적인 실체

 

2. 객체지향

  • 현실 세계를 직관적으로 모델링할 수 있는 패러다임

 

목표

  • 요구사항을 만족하는 시스템을 구현하는 것
  • 문제 해결을 위한 효과적인 구조를 설계하는 것 (단순히 현실 세계를 모방하는 것이 목표가 아님)

 

핵심 개념

개념 정의 및 설명 주요 특징
협력 복잡한 문제를 해결하기 위해 객체들이 서로 요청-응답하는 과정 - 객체 간 메시지 교환이 핵심
- 협력의 성공 여부는 객체의 응답 품질에 달려 있음
역할 협력 속에서 각 객체가 맡은 책임 - 다형성 지원: 동일한 역할을 여러 객체가 수행 가능
- 대체 가능성: 요청자는 역할을 수행하는 특정 객체에 관심 없음
- 한 객체가 여러 역할을 수행할 수 있음
책임 객체가 협력 과정에서 수행해야 하는 행위 - 객체는 자율적으로 자신의 책임을 수행해야 함
- 적절한 책임 분배가 중요

 

구조

개념 정의 및 설명 주요 특징
객체 협력의 주체 - 상태와 행동을 가짐
메시지 객체 간 요청을 전달하는 수단 - 요청을 받은 객체가 적절한 메서드로 처리
메서드 객체가 받은 메시지를 처리하는 방식 (내부적으로 실행되는 로직) - 객체의 자율성 보장
  - 메시지와 분리되어 있음)
  - 요청을 어떻게 처리할지는 내부적으로 결정됨

 

핵심 원칙

개념 정의 및 설명 주요 특징
캡슐화 객체 내부의 상태를 외부에서 직접 접근하지 못하도록 보호 - 데이터(상태)와 메서드(행동)를 하나로 묶음
- 정보 은닉을 통해 불필요한 접근 차단
자율성 객체가 스스로 판단하고 행동을 결정 - 자신의 상태와 행동을 스스로 관리
- 다른 객체의 간섭 없이 독립적으로 동작
다형성 동일한 역할을 수행하는 객체들이 서로 다른 방식으로 응답 가능 - 동일한 메시지에 대해 각각의 객체가 다른 방식으로 응답
- 코드의 유연성과 확장성 증가
협력 객체 간 요청과 응답을 통해 기능을 구현 - 메시지를 주고받으며 협력
- 역할과 책임을 나누어 효율적인 시스템 구성을 구성할 수 있음

 

3. 예시: 커피 주문

협력 과정

역할 책임 협력 과정 (요청과 응답)
손님 커피를 주문하고 결제 1. 캐시어에게 커피 주문 요청
2. 커피 제조 후 커피를 받음
캐시어 주문을 받고 결제를 처리 1. 손님에게 주문을 받음
2. 바리스타에게 커피 제조 요청
3. 결제 처리 후 손님에게 커피 제공
바리스타 커피를 제조 1. 캐시어로부터 커피 제조 요청을 받음
2. 커피를 만들어 캐시어에게 전달
  • 도움을 줄 수 있는 대상에게 요청하고 도움에 대해 응답하는 방식을 반복하여 작업을 수행

 

협력의 중요성

  • 일상에서의 문제는 혼자서 해결하기 어렵기 때문에 협력이 필수적
  • 원활한 협력을 위해서는 역할은 가진 객체들이 적절한 요청과 응답을 수행해야 함
  • 하나의 요청은 다른 요청을 유발할 수 있음 (즉, 연쇄적으로 협력이 이루어짐)