[독서] 객체지향의 사실과 오해 1장
조영호 지음
🐯표시는 기존의 지식이나 생각을 덧붙인 것이다.
1장 역할, 책임, 협력관계에서 본 객체지향
객체들의 모임이란
역할, 책임, 협력해야 하는 동적인 공동체이며
이 공동체를 시스템이라고 한다.
우리는 이 시스템을 작은 단위로 분할, 즉 객체로 분할하여 재사용할 수 있고 유지보수하기 쉽게 구성해야 한다.
🐯유지보수와 재사용은 비용효율적이다.
비용에는 시간도 포함이다.
그리고 이러한 역할, 책임, 협력을 할 때 취하는 행위가 나오는 동시에 객체에는 상태가 존재한다.
🐯앞으로 나아가기 위해 서있는 상태에서는 걸어가고 엎드린 상태에서는 기어가듯, 행위를 할 땐 항상 상태가 존재한다. 역할이 주어지면 그에 따른 책임이 존재하는 것처럼 말이다.
객체의 덕목 : 협력적, 자율적
Object같은 최고수준의 객체는 협력하지 않아도 전부 다룰 수 있을 것 같지만 결국 그 안의 복잡도로 인해 자멸한다. 그러므로 객체는 충분히 협력적이어야 한다.
바리스타에 따라 커피제조를 스스로 다른 방법으로 할 수 있듯이, 송신자 객체가 메시지를 전송하면 수신자 객체가 요청에 응답할 때 자율적으로 판단하여 적절한 메서드를 선택할 수 있다.
객체의 자율성을 보장하는 방식
1. 전통적인 개발과 달리 데이터와 프로시저를 객체란 하나의 틀에 함께 넣어둔다. 캡슐화(encapsulation)
🐯캡슐화는 정보은닉이다. 바리스타가 어떻게 커피를 제조할지에 대해 캐셔가 간섭하지 않듯 객체끼리는 그 내부 동작에 대해 알 수 없다.
2. 외부요청인 메시지 전송과 요청을 처리하기 위한 구체적인 방식인 메서드를 판단한 후의 응답은 "분리"되어있다. 메시지와 메서드의 분리.
절차지향적인 언어에서는 프로시저 호출에 대한 실행코드를 컴파일 단계에서야 하지만, 객체지향 언어는 메시지를 받은 후 요청에 따라 어떤 메서드를 쓸지는 미리 정해진 방식에 맞춰 반응한다.
객체지향에서 정적인 관계를 가진 클래스는 구현을 위한 구성요소(construct)이지, 핵심이 아니다. 동적인 객체들간의 협력구조와 책임을 식별하는 게 우선이다.
🐯구성요소는 component로 알고 있었는데 construct도 똑같이 책에서 쓰여 궁금했다.
찾아보니 construct는 명사형으로 "구를 이루는 단어들"로도 쓰였다.
절차부·제어부 또는 식별자, 명령문 등 구문상의 필요한 기술(설명)을 하기 위해 쓰이는 구성요소는 construct.
디버깅의 최소단위, 컴퓨터 장치, 독립된 역할을 하는 모니터나 컴파일러, 데이터 속성을 나타내는 개체 등을 component라고 부름을 찾았다.

2장 이상한 나라의 객체