CH01 협력하는 객체들의 공동체
책에서 나뉘어진 소제목의 분류 단위대로 정리하기엔 책 내용 요약이 힘들어서 내가 다시 봤을때 전체 맥락을 잘 상기할 수 있게끔 소제목이나 분류 단위를 조금씩 바꿨다.
객체지향은 실제 세계의 투영이 아니다
이건 CH02 에서도 나오는 내용이다. 저자가 강조하길 흔히 객체지향이라고 함은 현실세계를 추상화 하거나 그대로 본뜬 것이라고들 하는데 이는 매우 잘못된 인식이라고 한다. 저자의 표현으로는 실세계의 모방이 아니라 '새로운 세계를 창조' 하는 것이라고 한다.
미리 뒷내용을 여기 적자면 실제 세계의 투영이라는 관점은 객체지향에 대해서 설명하기에 어느정도 효과적인 설명인 것은 맞지만 객체지향의 세계에서는 실제 세계에서 일어날 수 없는 많은 일들(의인화)과 새로운 개념(추상적인 새로운 개념)들이 있기 때문에 '실제 세계의 투영' 이라는 것은 적절하지 않다는 것이다.
이건 뒤에 또 나오니까 일단 넘어가기로 한다.
역할, 책임, 협력
책에서는 바리스타가 커피 주문을 받아서 이를 제작해주는 과정을 통해서 객체를 비유하고 있다. 이 과정에서 소개되는 객체의 핵심 개념이 역할, 책임, 협력이다.
일단 여기서 말하는 협력이란 객체간의 협력을 뜻한다. 어플리케이션이 결국 궁극적으로 제공해야할 기능을 위해서 여러 객체가 협력해야한다는 것이다. 그리고 이 협력은 곧 각 객체가 각자에게 주어진 책임을 다 하면서 서로의 요청에 대해서 응답해주는 것을 의미한다.
그리고 책에서는 역할을 '관련성 높은 책임의 집합' 이라고 표현하고 있다.
객체의 두 가지 덕목
첫째, 객체는 협력적이어야 한다. 책에서 소개된 '어떤 객체도 섬이 아니다' 라는 인용구가 무척 인상적이었다. 객체가 협력적이라는 말은 다른 객체의 요청에 대해서 응답해주고, 다른 객체에게 요청을 하는 것을 의미한다. 하지만 책에서도 강조하고 있는 주의해야할 점은 협력적이라고 해서 상하 관계는 아니라는 것이다.
둘째, 객체는 충분히 '자율적' 이어야 한다. 상하 관계가 아니라는 맥락에 이어서 설명되는 것인데 타 객체의 요청은 단지 요청일뿐 지시가 아니라는 것이다. 타 객체의 어떠한 요구가 있으면 그 요청을 받은 객체는 그 요구에 대해서 어떤 식으로든 그 객체가 알아서 '자율적'으로 처리해야한다.
여기서 둘째 부분에 대해서 당장 자세하게 설명하고 있지 않은데, 이건 캡슐화와 관련이 있는 이야기다. 객체의 자율성이 확보될 수록 느슨한 결합이 달성되기 때문에 궁극적으로 유연한 어플리케이션 설계가 가능해진다.
객체는 상태와 행동을 가진다
객체는 상태와 행동을 가지는데, 책 뒤에 왜 '상태'가 있어야하는지와 왜 '행동'이 있어야하는지에 대해서 어찌 보면 당연한 것 같지만 의미있는 설명이 나온다. 객체는 상태와 행위를 하나의 단위로 묶는 자율적인 존재이다.
다만 상태의 경우 다른 객체는 일체 간섭할 수 없다. 오로지 상태의 조작은 해당 객체만 할 수 있으며 이래야만 객체가 자율적이라고 말할 수 있다. 다른 객체는 해당 객체가 '무엇'을 수행하는지는 알 수 있지만 '어떻게' 수행하는지에 대해서는 알 수 없어야 한다.
클래스는 단지 객체들의 협력 관계를 코드로 옮기는 도구일 뿐이다
흔히 객체지향이라고 하면 클래스의 구조나 관계에 대해서 사람들이 마치 그것이 전부이고 가장 중요하다는 것처럼 집중하는데 저자는 그것이 잘못되었다고 말하고 있다. 클래스가 중요하지 않다는 이야기가 아니라 객체의 역할, 책임, 협력 구조를 식별하는 것에 비해서 상대적으로 덜 중요하다는 것이다. 저자는 클래스는 협력에 참여하는 객체를 만드는데 필요한 구현 매커니즘일 뿐이라고 강조한다.
그런데 결국 각 객체의 역할과 책임에 대해서 고심하고 객체들 간의 협력 구조에 대해서 고민한 결과물이 결국 클래스가 되는거라고 생각한다. 그래서 클래스 구조도를 세밀하고 명확하게 완성하는 것 자체가 곧 저자가 말하는 바와 결과적으로 일치하게 되는 것 같긴 하다.
Last updated