객체지향의 사실과 오해 ch01
ch01을 읽으며 기록한 문장들
- p31 협력 속에 사는 객체
- 객체는 전지전능한 역할이 되어서는 안됨 -> 다른 객체의 요청에 응답
- 자기 스스로의 원칙에 따라 어떤 일을 하거나 자기 스스로를 통제하여 절제하는 것 -> 자율적인 객체
- 캐시어는 손님이 주문하면 행동 -> 손님에게 음료를 주문하는 절차나 바리스타에게 접수 내역을 전달하는 방법은 스스로 결정 -> 손님이 캐시어에게 어떤 질문을 하거나, 주문 내역을 어떤 방식으로 전달해달라고 지시하지 않음 -> 캐시어는 자율적인 존재
- p32 상태, 행동을 지닌 객체
- 객체는 상태(state)와 행동(behavior)을 함께 지닌 실체
- 협력에 참여하기 위해 어떤 행동을 행동을 하는데 필요한 상태도 함께 지니고 있어야 함
- 커피를 제조하는 바리스타가 제조하는 법을 모를 수 없음 -> 어떤 행동을 하기 위해 필요한 상태 알지 못함 -> 말이 안됨
- 객체는 다른 객체가 무엇(what)을 수행하는지 알수 있음 -> 어떻게(how) 수행하는지는 알 수 없음
- 자율적인 객체로 구성된 공동체 -> 유지보수가 쉽고 재사용이 용이한 시스템을 구축할 가능성 제시
p35 객체지향의 본질
- 자율적인 객체들의 공동체
- 상태와 행위를 함께 지니며 스스로 자기 자신을 책임지는 객체
- 행위를 구현하기 위해 다른 객체와 협력, 정해진 역할 수행 -> 역할은 책임의 집합
- 다른 객체와 협력하기 위해 메시지 전송 , 메시지 수신한 객체 -> 적합한 메서드를 자율적으로 선택
p37 객체지향은 클래스(class)에 대한 착각
- 객체지향 선구자들의 초기 의도와 달리 대부분의 사람들은 객체 지향을 클래스를 지향하는 것 이라고 생각함 -> 클래스에 대한 중요성이 과하다 싶을 정도로 강조됨 -> 조금씩 부풀려짐
- 클래스를 정의하는 방법, 클래스 사이의 상속에 초점을 맞춤 -> UML의 대표적인 다이어그램을 클래스 다이어그램을 떠올림, 하지만 객체지향 분석/설계의 목적은 훌륭한 클래스를 식별하는 것
- 객체지향의 핵심을 이루는 중심개념은 아님 클래스가 -> 자바스크립트 같은 프로토타입(prototype) 기반 객체지향 언어는 클래스가 존재하지 않음 -> 오직 객체만 존재함 -> 이런 언어 속의 상속 역시 클래스가 아닌 객체 간의 위임(delegation) 메커니즘을 기반으로 함
- 지나치게 클래스를 강조하면 -> 객체의 캡슐화를 저해 , 클래스를 서로 강하게 결합 시킴 -> 객체들의 공동체가 아니라 클래스로 구성된 설계도로 보는 관점은 유연하고 확장 가능한 애플리케이션 구축을 방해함
- 어떤 클래스가 필요하지 x -> 어떤 객체들이 어떤 메시지를 주고받으며 협력하는가
- 클래스는 객체들의 협력 관계를 코드로 옮기는 도구에 불과 , 클래스는 객체지향 세계의 도시 전설
- 적절한 책임을 수행하는 역할 간의 유연하고 견고한 협력 관계를 구축하는 것 -> 협력에 참여하는 객체를 만드는데 필요한 구현 메커니즘 -> 협력 구조와 책임을 식별하는 것에 비해 덜 중요하다는 말 -> 메시지를 주고받는 객체들의 동적인 관계
- 클래스의 구조와 메서드가 아님 -> 객체의 역할, 책임, 협력에 집중