[서평] 객체지향의 사실과 오해

dante Yoon·2021년 10월 8일
6

독서

목록 보기
10/38
post-thumbnail

지난 달인 9월 독서일지에 읽은 소감에 대해 짧게 작성한 기록이 있다.

이 책에는 객체지향 프로그래밍을 이해하는데 기반이되는 중요한 개념들이 많아 서평을 좀 자세히 작성해 보려고 한다.

작성하기에 앞서

서평이란 무엇인가? 서평은 독자가 책을 선택하는데 도움을 주는 것이다.

읽지 않은 사람에 대한 배려와 도움을 내포하기 위해서는, 책에 대한 객관적 정보와 함께 논리적 근거가 기반이 된 느낌이나 감정 또한 일부분 내포되어야 한다.
제대로 된 서평을 작성했다면 책을 선택하는 사람이 책을 읽고 난 뒤의 미래의 자기 모습을 서평을 쓴 사람에 투영하여 상상할 수 있을 것이다.

어떤 책인가

객체지향과 관련된 개념은 기술면접의 오래된 케케묵은 질문이다.
마치 식탁을 차릴때 수저의 배치라던가 밥, 국, 반찬 및 인원 배치를 어떻게 해야 각 사람이 서로 다른 입맛에 맞춰 최소한의 움직임으로 최적화된 식사를 즐길 수 있는가에 대한 고민을 하는 것처럼, 소프트웨어 개발을 함에 있어 유지보수가 쉽고 주어진 요구 사항을 효율적으로 완벽히 수행하는 코드를 어떻게 작성할 수 있는가에 대한 여러 소프트웨어 개발 방법론 중 하나이다.

흔히 학부 과정에서의 객체지향 프로그래밍 이라 하면 디자인 패턴이나 클래스를 어떻게 다양하게 설계할 수 있는지에 대한 것들을 배우곤 하는데,
이렇게 7가지 무지개 색깔을 하나하나 다 모으고 이해해야 무지개라는 단어를 완벽히 설명할 수 있을 것 같은 느낌 말고, 더욱 명확하고 하나의 문장으로 객체지향을 정의할 수 있는 방법이 없는지 궁금했다.

이런 측면에서 이 책의 작가가 집필동기에 쓴 글을 보면, 책을 선택하는 판단에 있어서 도움을 받을 수 있다.

객체지향 프로그래밍에 대한 구체적이고 상세한 지식을 전달하는 것이 아니다. 이 책은 객체지향을 다루는 다른 책이나 자료들을 읽을 때 미리 알고 있으면 도움이 될 만한 기본 배경과 지식을 다루는 책이다.

이 책 한권을 읽었다고 갑자기 수준이 높아지고 더 훌륭한 프로그램을 작성하는 일은 절대 일어나지 않는다.

작가인 조영호씨는 또 다른 저서인오브젝트로 유명하다. 오브젝트는 교보문고의 21년 필수 IT서적 리스트에 포함된 책이다.

주요 내용 요약

객체들에 인격을 부여해서 각 인격들이 어떤 일을 맡아 수행하는지에 대한 묘사가 많이 나온다. 이를테면 이상한 나라의 엘리스에 나오는 토끼나 트럼프 카드가 이상한 나라에서 어떤 역할을 맡고 있는지를 묘사함으로 객체지향에 대한 설명을 풀어나가는 방식이다.

역할, 책임이라는 단어가 매우 많이 등장하는데, 두 단어는 본 책이 설명하는 객체지향을 이해하는데 있어서 매우 주요하게 기능하는 키워드이다.

저자는 객체지향의 목표는 실세계를 모방하는 것이 아니라 고객을 만족시킬 수 있는 신세계를 창조하는 것이라고 말한다.

많은 사람들이 객체지향을 설명할때 캡슐화라는 단어를 사용하는데 이 단어는 객체의 자율성을 설명하는데 쓰이는 단어이며 실세계에서 객체는 자율성을 가지고 있지 않는다. 커피 전문점의 커피머신은 사람의 도움 없이는 커피를 내리지 못한다.

실무에서 코드로 만들어지는 각 객체의 자율성은 실세계와 다소 거리가 있음에도 사람들이 객체지향 = 실세계의 모방이라는 개념을 많이 사용하는 이유에 대해서 저자는 객체지향이라는 용어 자체에 담긴 기본사상을 이해하고 학습하는데는 매우 효과적이기 떄문이라고 설명한다.

인용 및 차용)

현실 세계의 사람들이 약속이나 계약을 기반으로 협력해서 목표를 이뤄나가는 과정이 메세지를 주고받으며 공동의 목표를 달성하기 위해 협력하는 객체들의 관계를 설명하는데 적합하다

협력

협력은 요청 (Request)와 응답(Response)로 구성된다.
사람들이 스스로 해결못하는 벽에 부딫힐 때, 도움을 줄 수 있는 사람에게 도움을 요청(Request)한다.
커피 전문점에서 손님은 직접 커피를 내리지 않고 캐시어에게 주문을 통해 원하는 음료를 손에 넣는다.
손님 -> 캐시어 -> 바리스타

완성된 커피는 바리스타로 부터 손님에게로 응답(Response)되어진다.
바리스타 -> 캐시어 -> 손님

역할과 책임

손님, 캐시어, 바리스타는 모두 어떤 사람이 부여받은 역할(role)을 나타낸다.
그리고 이 역할에는 책임이 수반되어진다.
프로그래머에게는 훌륭한 프로그램을 개발할 책임이 있는 것 처럼 역할은 책임을 암시하며 책임은 협력에서 각 사람(객체)가 해야할 행동을 묘사한다.

역할 협력 책임

실세계의 모방이라는 은유를 사용해서
커피를 주문하는 현실세계의 의사소통 과정을 객체지향 세계의 언어들로 바꿔말하면
사람은 객체
요청은 메시지
행동은 메서드가 된다.

책의 첫장만 읽고서도 아, 객체지향에서 객체는 역할과 책임을 부여받고 다른 객체들과 협력하는데 그 의의가 있는거구나 라는 생각을 할 수 있다. 상속컴포지션이라는 단어보다 더욱 명확하지 않은가?

상태와 자율성

책에 상태(state)라는 단어가 나오는데, 프론트엔드 개발자인 나는 이 단어를 보면 멈칫거린다. 아, 뭔가 꼭 이해하고 넘어가야 하는 순간이 도래했다.라고 생각한다. 재밌는 순간이다.

바리스타가 커피를 제조하기 위해서는 어떤 제조법을 기억하고 있는지 스스로 판단하는 것처럼 객체는 스스로 자율성을 가지고 요청에 대해 행동하기 위해 상태를 가지고 있어야 한다.
상태와 행동을 함께 가지고 있는 객체는 협력관계에서 자율적인 객체로 격상되며, 데이터와 프로세스를 엄격히 구분하는 전통적인 개발방법과 객체지향을 구분짓는 핵심적인 차이점이 이곳에서 드러난다.

저자는 다음과 같이 말한다. (인용)

자율적인 객체로 구성된 공동체는 유지보수가 쉽고 재사용이 용이한 시스템을 구축할 수 있는 가능성을 제시한다.

여기까지 읽어보신 분들은 메시지와 메서드의 차이점을 구분할 수 있는가?

역할 협력 책임을 설명할떄 요청은 메시지, 행동은 메서드가 된다고 했다. 객체와 객체가 통신할 때 수신자는 먼저 수신된 메시지를 이해할 수 있는지 스스로 판단하고 처리한다. 이때 처리하는 방법을 메서드라고 한다.

다시 객체지향이라는 단어로 돌아오면,

객체지향이란(인용)

  • 시스템을, 상호작용하는 자율적인 객체들의 공동체로 바라보고 객체를 이용해 시스템을 분할하는 방법이다.
  • 자율적인 객체는 상태와 행위를 함께 지니며 스스로 자신을 책임진다.
  • 객체는 시스템의 행위를 구현하기 위해 다른 객체와 협력한다.
  • 객체는 협력하기 위해 다른 객체에게 메시지를 전송하고 이를 수신한 객체는 적합한 메서드를 자율적으로 선택한다.

아쉬운 점

본 책을 읽으며 아쉬웠던 부분은, 개념적인 부분에 대한 설명이 책의 대부분을 차지하고 있기에 어느 순간 내가 각 개념을 잘 이해하고 기억하고 있는가에 대해 의구심이 든 것이다.

예제 코드가 조금 있어서 개념에 대한 실제 구현 부분이 군데군데 있었다면 더욱 나에게 맞지 않았을까 생각한다.

하지만, 이러한 아쉬운점에도 불구하고 객체지향 이라는 주제가 주어졌을때 이에 대해 한 문장으로 설명할 수 있는 힘을 기르고 싶은 사람이라면 본 책을 읽는 것을 적극 추천한다.

객체지향은 클래스로 코드를 작성하는 것이다라는 선입견을 버리는 것에 관심이 있다면 본 책을 꼭 읽어보길 권장한다.

평점: 4.7 / 5

profile
성장을 향한 작은 몸부림의 흔적들

0개의 댓글