- 객체란 현실 세계에 존재하는 사물에 대한 추상화
그러나 이와 같은 개념은 객체지향의 기반을 이루는 철학적인 개념을 설명하는데는 적합하지만
실용적인 관점에서 객체지향 분석, 설계를 설명하기에는 적합하지 않다.
- 객체지향의 목표는 실세계를 모방하는 것이 아니라 새로운 세계를 창조하는 것.
그러나 1장은 실세계의 모방이라는 전통적인 관점에서 객체지향의 다양한 개념을 설명한다.
< 협력하는 사람들 >
- 손님이 커피를 주문, 캐시어가 주문을 받고, 바리스타가 커피를 제조하는 과정이 필요
- 역할(role), 책임(responsibility), 협력(collaboration)이라는
일상 속에 있는 세가지 개념이 객체지향의 가장 중요한 개념
요청과 응답을 통해 협력할 수 있는 능력은 복잡한 문제를 해결할 수 있는 공동체를 형성할 수 있게 한다.
역할 : 손님, 캐시어, 바리스타
책임 : 손님은 주문할 책임, 캐시어는 바리스타에게 전달할 책임, 바리스타는 커피를 만들 책임
< 역할, 책임, 협력 >
- 객체지향 설계는 적절한 객체에게 적절한 책임을 할당하는 것부터 시작된다.
- 책임이 불분명한 객체는 애플리케이션의 미래 역시 불분명하게 만든다
객체의 역할의 특징
1. 여러 객체가 동일한 역할을 수행할 수 있다
2. 역할은 대체 가능성을 의미
3. 각 객체는 책임을 수행하는 방법을 자율적으로 선택할 수 있다
4. 하나의 객체가 동시에 여러 역할을 수행할 수 있다
객체의 덕목
1. 충분히 '협력적' 이어야 한다.
- 다른 객체의 요청에 귀 기울이고, 다른 객체에게 적극적으로 도움을 요청할 정도.
2. 충분히 '자율적'이어야 한다.
ex) 캐시어가 주문을 받고, 바리스타에게 접수내역을 전달하는 방법을 스스로 판단
< 객체지향의 본질 >
- 시스템을 상호작용하는 자율적인 객체들의 공동체로 바라보고 객체를 이용해 시스템을 분할하는 방식
- 자율적인 객체란 상태와 행위를 함께 지니며 스스로 자기 자신을 책임지는 객체
- 객체는 시스템의 행위를 구현하기 위해 다른 객체와 협력한다.
각 객체는 협력 내에서 정해진 역할을 수행하며 역할은 관련된 책임의 집합이다.
- 객체는 다른 객체와 협력하기 위해 메시지를 전송하고,
메시지를 수신한 객체는 메시지를 처리하는데 적합한 메서드를 자율적으로 선택한다.
< 객체를 지향하라 >
- 클래스는 객체지향 프로그래밍 언어의 관점에서 매우 중요한 구성요소지만
객체지향의 핵심을 이루는 중심 개념이라고 말하기는 어렵다.
- 지나치게 클래스를 강조하는 프로그래밍 언어적인 관점은
캡슐화를 저해하고 클래스를 서로 강하게 결합시킨다.
- 어떤 클래스가 필요한가가 아니라 어떤 객체들이 어떤 메시지를 주고 받으며 협력하는가가 중요하다.
- 클래스는 객체들의 협력 관계를 코드로 옮기는 도구에 불과하다.
- 객체지향의 중심에는 클래스가 아니라 객체가 위치하며,
중요한 것은 클래스들의 정적인 관계가 아니라 메시지를 주고 받는 객체들의 동적인 관계다
- 클래스의 구조와 메서드가 아니라 객체의 역할, 책임, 협력에 집중하라
객체지향은 객체를 지향하는 것이지 클래스를 지향하는 것이 아니다.
'책 > 객체지향의 사실과오해' 카테고리의 다른 글
객체지향의 사실과 오해) 06 / 객체 지도 (0) | 2020.01.25 |
---|---|
객체지향의 사실과 오해) 05 / 책임과 메시지 (0) | 2020.01.24 |
객체지향의 사실과 오해) 04 / 역할, 책임, 협력 (0) | 2020.01.16 |
객체지향의 사실과 오해) 03 / 타입과 추상화 (0) | 2020.01.08 |
객체지향의 사실과 오해) 02 / 이상한 나라의 객체 (0) | 2020.01.06 |