이 책을 읽고 느낀 점 및 약간의 글귀를 기록하고자 한다.
1. 협력하는 객체들의 공동체
- 객체지향의 목표는 실세계를 모방하는 것이 아니다. 오히려 새로운 세계를 창조하는 것이다.
- 단순히 실세계를 소프트웨어 안으로 옮겨 담는 것이 아니라 고객과 사용자를 만족시킬 수 있는 신세게를 창조하는 것이다.
- Bertrand Meyer는 다음과 같이 말했다.
- "소프트웨어 시스템이 해결하려고 하는 실재는 잘해봐야 먼 친척밖에는 되지 않는다."
Q. 그렇다면 왜 실세계 객체와 소프트웨어 객체 간의 대응할까?
A. 실세계에 대한 비유가 객체지향의 다양한 측면을 이해하고 학습하는데 효과적이기 때문..
<커피공화국 이야기>
손님, 캐시어, 바리스타를 예시로 들며 역할, 책임, 협력에 대해 설명한다.
여기서 4가지 중요한 사실이 있다.
- 여러 사람이 동일한 역할을 수행할 수 있다. ex) 캐시어 역할에 따르는 책임을 수행 할 수 있는 누구나 될 수 있다.
- 역할은 대체 가능성을 의미한다. ex) 손님 입장에서 캐시어는 대체 가능하다.
- 책임을 수행하는 방법은 자율적으로 선택할 수 있다. ex) 바리스타는 자신만의 방법으로 커피를 제조 할 수 있다.
- 한 사람이 동시에 여러 역할을 수행할 수 있다. ex) 캐시어와 바리스타는 한 사람이 수행할 수 있다.
요약하면 객체는 역할과 책임을 수행하며 협력하는 관계를 가진다.
<협력 속에 사는 객체>
객체는 충분히 "협력적"이어야 한다. 또한 객체는 충분히 "자율적"이어야 한다.
- 협력적: 다른 객체의 요청을 충실히 귀 기울이고 다른 객체에게 적극적으로 도음을 요청할 정도로 열린 마음을 지녀야 함.
- 자율적: 캐시어는 손님의 요청에 대해 스스로 판단하고 행동하는 자율적인 존재이다.
"객체지향 설계의 묘미는 다른 객체와 조화롭게 협력할 수 있을 만큼 충분히 개방적인 동시에 협력에 참여하는 방법을 스스로 결정할 수 있을 만큼 충분히 자율적인 객체들의 공동체를 설계하는 데 있다."
객체지향의 세계에서는 오직 한 가지 의사소통 수단만이 존재한다. 이를 "메시지"라고 한다.
ex) 캐시어가 바리스타에게 어떤 메뉴를 만들어달라고 요청함.
객체가 수신된 메시지를 처리하는 방법을 "method"라고 한다.
ex) 바리스타는 기계를 이용해 커피를 제조 할 수 있고 수작업으로 커피를 제조 할 수도 있다.
외부의 요청이 무엇인지를 표현하는 메시지와 요청을 처리하기 위한 구체적인 방법인 메서드를 분리하는 것은 객체의 자율성을 높이는 핵심 메커니즘이다. 이는 캡슐화(encapsulation) 개념과도 깊은 관련이 있다.
<객체지향의 본질>
- "많은 사람들은 객체지향이라는 말을 들으면 조건반사적으로 클래스라는 단어를 떠올린다."
- "클래스가 객체지향 프로그래밍 언어의 관점에서 매우 중요한 구성요소인 것은 분명하지만 객체지향의 핵심을 이루는 중심 개념이라고 말하기에는 무리가 있다."
- "애플리케이션을 협력하는 객체들의 공동체가 아닌 클래스로 구성된 설계도로 보는 관점은 유연하고 확장 가능한 애플리케이션의 구축을 방해한다."
- "클래스는 협력에 참여하는 객체를 만드는 데 필요한 구현 메커니즘일 뿐이다."
★ 중요한 것은 클래스들의 정적인 관계가 아니라 메시지를 주고받는 객체들의 동적인 관계다.
★ 객체지향은 객체를 지향하는 것이지 클래스를 지향하는 것이 아니다!
'독서 > 객체지향의 사실과 오해' 카테고리의 다른 글
객체지향의 사실과 오해(3장) (0) | 2023.08.05 |
---|---|
객체지향의 사실과 오해(2장) (0) | 2023.08.02 |