조영호 님의 "객체지향의 사실과 오해" 책을 정리한 글입니다.
1. 객체
- 현실 세계의 사물을 추상화한 개념
- 상태(State)와 행동(Behavior)을 함께 지닌 자율적인 실체
2. 객체지향
- 현실 세계를 직관적으로 모델링할 수 있는 패러다임
목표
- 요구사항을 만족하는 시스템을 구현하는 것
- 문제 해결을 위한 효과적인 구조를 설계하는 것 (단순히 현실 세계를 모방하는 것이 목표가 아님)
핵심 개념
개념 | 정의 및 설명 | 주요 특징 |
협력 | 복잡한 문제를 해결하기 위해 객체들이 서로 요청-응답하는 과정 | - 객체 간 메시지 교환이 핵심 - 협력의 성공 여부는 객체의 응답 품질에 달려 있음 |
역할 | 협력 속에서 각 객체가 맡은 책임 | - 다형성 지원: 동일한 역할을 여러 객체가 수행 가능 - 대체 가능성: 요청자는 역할을 수행하는 특정 객체에 관심 없음 - 한 객체가 여러 역할을 수행할 수 있음 |
책임 | 객체가 협력 과정에서 수행해야 하는 행위 | - 객체는 자율적으로 자신의 책임을 수행해야 함 - 적절한 책임 분배가 중요 |
구조
개념 | 정의 및 설명 | 주요 특징 |
객체 | 협력의 주체 | - 상태와 행동을 가짐 |
메시지 | 객체 간 요청을 전달하는 수단 | - 요청을 받은 객체가 적절한 메서드로 처리 |
메서드 | 객체가 받은 메시지를 처리하는 방식 (내부적으로 실행되는 로직) | - 객체의 자율성 보장 - 메시지와 분리되어 있음) - 요청을 어떻게 처리할지는 내부적으로 결정됨 |
핵심 원칙
개념 | 정의 및 설명 | 주요 특징 |
캡슐화 | 객체 내부의 상태를 외부에서 직접 접근하지 못하도록 보호 | - 데이터(상태)와 메서드(행동)를 하나로 묶음 - 정보 은닉을 통해 불필요한 접근 차단 |
자율성 | 객체가 스스로 판단하고 행동을 결정 | - 자신의 상태와 행동을 스스로 관리 - 다른 객체의 간섭 없이 독립적으로 동작 |
다형성 | 동일한 역할을 수행하는 객체들이 서로 다른 방식으로 응답 가능 | - 동일한 메시지에 대해 각각의 객체가 다른 방식으로 응답 - 코드의 유연성과 확장성 증가 |
협력 | 객체 간 요청과 응답을 통해 기능을 구현 | - 메시지를 주고받으며 협력 - 역할과 책임을 나누어 효율적인 시스템 구성을 구성할 수 있음 |
3. 예시: 커피 주문
협력 과정
역할 | 책임 | 협력 과정 (요청과 응답) |
손님 | 커피를 주문하고 결제 | 1. 캐시어에게 커피 주문 요청 2. 커피 제조 후 커피를 받음 |
캐시어 | 주문을 받고 결제를 처리 | 1. 손님에게 주문을 받음 2. 바리스타에게 커피 제조 요청 3. 결제 처리 후 손님에게 커피 제공 |
바리스타 | 커피를 제조 | 1. 캐시어로부터 커피 제조 요청을 받음 2. 커피를 만들어 캐시어에게 전달 |
- 도움을 줄 수 있는 대상에게 요청하고 도움에 대해 응답하는 방식을 반복하여 작업을 수행
협력의 중요성
- 일상에서의 문제는 혼자서 해결하기 어렵기 때문에 협력이 필수적
- 원활한 협력을 위해서는 역할은 가진 객체들이 적절한 요청과 응답을 수행해야 함
- 하나의 요청은 다른 요청을 유발할 수 있음 (즉, 연쇄적으로 협력이 이루어짐)
'Code > OOP' 카테고리의 다른 글
[오브젝트] 4. 설계 품질과 트레이드오프 (0) | 2025.04.03 |
---|---|
[오브젝트] 3. 역할, 책임, 협력 (0) | 2025.04.03 |
[오브젝트] 2. 객체지향 프로그래밍 (1) | 2025.04.02 |
[객체지향의 사실과 오해] 2. 이상한 나라의 객체 (1) | 2025.04.02 |
[오브젝트] 1. 객체, 설계 (0) | 2025.04.02 |