목차
- 객체지향의 오해와 사실
- 책임 역할 그리고 협력
- 결론
서평
객체지향의 오해와 사실
“객체지향” 이 단어는 프로그래밍을 하는 사람이라면 귀에 딱지가 앉도록 정말 많이 들어본 단어일 것이다. 하지만 객체지향을 서술하라는 질문에 대하여 정확한 근거를 들어 무엇이 객체지향인지 혹은 객체지향적인 언어가 무엇인지 서술하기란 쉽지 않은 대답이다. 많은 이유가 있겠지만 몇 가지 생각해 보자면 객체지향이란 단어 자체가 추상적인 명사인 객체라는 단어와 지향이라는 단어의 합성어이기에 직관적으로 이해하기 어렵다. 객체지향의 단편적인 특징 다형성, 상속, 캡슐화 등은 알고있지만 특징의 이해만으로 객체지향적인 코드를 구현해내기란 어렵기에 객체지향을 서술 할 수 있다고 말하기엔 곤란하다.
책 객체지향의 사실과 오해는 객체지향에 대하여 긴 호흡으로 천천히 함의하고 있는 의미들 부터 풀어나간다. 프로그래밍적 해석 이전 언어적으로 객체라는 단어를 활용할 때 함의되는 의미들인 ‘역할’과 ‘책임’ 그리고 객체사이의 상호작용이 동반될 때 찾아오는 ‘협력’ 이 세가지 의미로 객체지향에 대하여 객체를 지향한다는 의미를 어떻게 받아들여야 하는지 설명하고 이 의미를 받아들임으로써 당연히 도출되는 다형성, 상속, 캡슐화 같은 객체지향의 특징을 체계를 가지고 서술해나간다. 작가가 객체지향을 서술하는 책의 흐름을 따라 진행하다 책의 말미정도에 “객체지향이란 무엇인가?”란 질문을 스스로 에게 던져보면 이전에는 단편적인 특징이나 객체지향언어의 문법이 떠오르던 파편적인 조각에서 벗어나 객체지향에 대해 잘 정리된 탄탄한 체계를 떠올릴 수 있게 된다.
책임 역할 그리고 협력
객체는 실세계에서 상호작용하는 일련의 과정을 생각할 때 그 주체가 되는 단위이다. 노트북을 사는 사람을 생각해보자. “사람”이라는 객체가 “노트북”이란 객체를 산다는 과정이다. 바람에 흔들리는 나무를 생각해보자. “바람”이라는 객체가 “나무”라는 객체를 흔드는 과정이다. 이처럼 객체는 상호작용할 때 그 주체가 되는 단위들이라고 말할 수 있다.
이때 이런 객체들은 일련의 과정 속에서 각자의 역할이 있고 과정 속 동사인 행위들에 대하여 일련의 책임을 가지고 서로 협력을 통해 상호작용을 한다고 이해해볼 수 있다. 객체지향은 이러한 실세계의 상호작용을 소프트웨어 세계에 “은유”해 구현하는 개발 방법론이라고 말할 수 있다. 내가 책을 읽고 낸 객체지향에 대한 서술이다.
앞선 노트북 구매 예시에서 사람의 역할 어떤 누구든 사람이라면 대체할 수 있다. 사람의 역할에서 원빈이 그 역할을 할 수도 있고 수지가 그 역할을 할 수도 있다. 노트북 역시 맥북이 될 수도 있고 그램이 될 수도 있다. ‘역할은 A로부터 B로 대체 가능하다’라는 의미로부터 우리가 객체지향 프로그래밍에서 잘 알고 있는 다형성 이란 테크닉을 구현할 수 있게되었다. 또한 대체가능한 역할들은 원빈과 수지 모두 인간이라는 인지적으로 파악할 수 있는 추상적 공통점을 활용해 묶을 수 있고 예시에서 인간이라는 역할을 서술해 놓은 글을 Interface라는 프로그래밍적 문법으로 구현할 수 있게 되었다.
책 객체지향의 사실과 오해에서는 이 글에서 몇 문단을 할애해 서술한 객체지향에 대한 대표적 이해 외에도 개발자라면 익숙한 파편적인 객체지향에 대한 특징 캡슐화 책임-주도설계 역할과 구현의 분리 와 같은 개념들을 객체에 집중해서 논리적으로 매력적이게 서술한다. 또한 글 말미에는 객체지향 이해를 바탕으로한 프로그래밍 설계 방법론을 기능과 구조라는 두 큰 축으로 설계의 방향성을 명확하게 제시해주는데 객체지향적인 설계가 무엇인지 스스로 파악하게 되는 힘을 가지게 된다는 점에서 이 챕터가 책의 백미이다.
결론
백지복습이라는 공부 방법이 있다. 자신이 그날 한 공부를 되새기며 백지에 무엇을 공부했는지 작성하며 밖으로 꺼내보는 연습을 하는 공부방법이다. 지식은 자신이 받아들인 것을 다시 꺼내볼 수 있을 때 즉 인풋을 다시 아웃풋으로 발현할 수 있을 때 지식을 자신의 것으로 만들었다고 볼 수 있다는 관점에서 백지복습은 괜찮은 공부방법이다. 비슷하게 객체지향에 대해 적지 않은 인풋을 받아들였지만 이를 설명해보라고 하는 요청을 받는다면 꺼내기 쉽지않았고 곤란했다. 체계가 잡혀있지 않아 명확하게 말할 수 없어 파편적인 특징과 프로그래밍 문법만을 반복해서 말하는 내가 생각이난다.
책 객체지향의 사실과 오해에서 서술해 나가는 작가의 객체지향에 대한 서사를 읽어나가며 객체지향 공부한 것에 대해 백지복습을 해보라고 한다면 이전과는 다르게 틀을 가지고 서술해 나가는 내 모습이 상상된다.
'서적 > 기술서적' 카테고리의 다른 글
[클린코드] 3장 함수 (1) | 2022.01.28 |
---|