객체지향의 사실과 오해

1. 책 읽게 된 계기
대학교 3학년 시절, 플랫폼프로그래밍 수업을 들었다.
해당 수업에서는 java의 기초와 나아가 Swing을 이용하여 GUI 프로그래밍을 하는 것이 목표였다.
그런데 교수님께서는 수업의 근3주간 땀을 뻘뻘 흘리고, 목을 아파하시면서 소리를 고래고래내어 자바 언어의 핵심 패러다임인 객체지향에 대해서 설명을 하셨었다.
객체지향을 설명하시는 교수님은 정말 스스로 즐거워보이셨고, 너희들도 이치 깨닫고 즐거움을 나와 함께 나누자하는 열정을 엄청나셨다.
"프로그래밍이 프로그래밍이지, 무엇이 저렇게 우수 젖을 만큼 즐거울까 ?" 궁금했다.
교수님께서는 수업 중 이 책을 추천해주셨고, 이 책은 이미 컴퓨터 공학과 학과내에서 나름의 이름난 책이었다.
그리고 책을 읽고난 후, 교수님이 그토록 즐거워했던 이유와 답답했던 무언가들을 해소할 수 있었다.
2021년 처음 이 책을 접해서 1번 읽었을 땐 너무 신선한 충격(?)에 빠졌고, 갇혀있는 무언가에서 빠져나온 느낌이 들었다.
그리고는 2022년 두번째로 다시 이책을 접할때는 스프링을 공부할 때 였고, 더 깊게 스프링에 대해 이해할 수 있었다.
마지막으로 2024년 회사에서 풀스택으로 개발을 할때 였고, 이번에는 많은 용기를 얻었다.
2. 책을 읽고 나서
이 책은 객체지향의 널리 알려진 개념에 의문을 품으며 이야기를 시작한다.
객체지향은 실세계를 직접적이고, 직관적으로 모델링할 수 있는 패러다임이라고 말한다. 그리고 많은 사람들은 이 말에 공감한다.
하지만 책에서는 "객체지향은 실세계의 모방이다" 라는 말은 객체지향의 기반이되는 철학적 관점에서는 맞지만 유용하고 실용적인 관점에서는 그렇지 않다고 말한다.
책에서는 많은 비유들을 들어가며 실세계의 객체와 소프트웨어 세상의 객체의 미묘한 차이를 설명한다.(사실 미묘하지도 않다.)
간단하게 비유를 들자면, 현실세계에서는 우리가 식당에 들어가서 밥을 먹고 빌지(주문내역)객체 음식값을 직접 계산하지만, 소프트웨어 세상에서 빌지는 스스로가 음식값을 합계를 계산하고 결과를 전달해준다. 또 다르게는 실세계에서는 자동차가 기름이 떨어지면 스스로 기름을 넣지 못하지만, 소프트웨어 세상에서는 기름통이 스스로 주유소에 메세지를 요청해 기름을 받아올 수 있다.
위 처럼 저자는 우리가 객체지향에 입문을 할때 발생하는 많은 오해들을 풀어주는데, 정말 무언가 막힌 것이 뻥 뚫리는 듯이 시원한 쾌감을 선사해준다.
객체를 붕어빵틀이라는 클래스에서 찍어내서 나오는 붕어빵이라고 생각하는 분들이 있다면 꼭 이 책을 읽고 나처럼 시원함을 느껴보았으면 좋겠다.
간단히 객체지향에 대한 오해들에 대한 이야기를 마치면 저자는 객체지향에 대해서 본격적으로 역할, 책임, 협력이라는 관점으로 객체지향의 아름다움을 설명해준다. 책을 읽고나서는 많은 내용들이 머릿속으로 스쳐지나갔다. 정말 한문장 한문장 관통하는 것들이 너무 많았기에 이 책을 이렇게 독서록을 적어도 되는지 모르겠다. 그러나 지금은 가장 기억에 남는 것에 대해서 말해야겠다. 간단한 문장이다.
"자신의 행동이 자신의 상태를 결정한다"
옛날 프로그래밍이나 다른 패러다임의 프로그래밍은 상태(데이터)와 행위(함수)가 딱딱 분리가 되어있는 경우가 대다수이다.
하지만 객체지향은 다르다. 객체들은 행위와 상태를 동시에 가지고 있고, 스스로가 자신의 상태를 변경한다. 현재의 행위는 현재의 상태에 의존하고, 상태는 과거의 행위들에 대한 기록이다. 즉, 행위를 중심으로하여 다른 객체들과 조화롭게 메세지를 주고 받도록 설계하는 것이 중요하다.
위의 말에는 사실 역할, 책임, 협력의 포인트들을 모두 찾을 수 있다. 다른 객체들과 조화롭게 메세지를 주고 받기위해서는 객체들을 균형있고, 효율적이게 책임을 가져가서 자신의 역할을 수행하고, 서로 메세지를 주고 받으며 협력을 하면 된다는 소리다.
이 책을 읽으며 정말 많은 것들을 배울 수 있었고, 한편으로는 저자가 이러한 개념들을 자신의 머릿속에서 끄집어내어 이렇게 좋은 비유들과 함께 정리를 했는지 경의롭기도 했다.
마지막으로 책을 읽었던 시점인 지금의 나는 회사에서 풀스택으로 개발을 하고 있는데, 프론트에서는 화면에 보이기전 데이터를 조금 더 꾸며서 내보내는 기능이 많이 필요했고, 이는 함수형프로그래밍을 많이 요구했다. 백엔드 개발은 자바, 스프링 스택으로 개발을 했지만 현재로서는 프론트의 개발 투입 비중이 컸기에 백엔드 개발에 자신감이 많이 떨어지려고 하는 상태였다. 하지만 다시 이 책을 읽으니, '그래! 이게 백엔드의 즐거움이고 낭만이었지?' 하며 자신감과 용기를 얻을 수 있었고, 좋은 객체지향 설계를 하고 싶은 의욕이 불타올랐다. 정말 두고 두고 펼쳐보아도 새롭고 재밌는 책이었다.
그래서 교수님이 그렇게 즐거워 하셨구나 알 수 있었다.
3. 총평
객체지향프로그래밍 패러다임에 관심이 있는 사람이라면 꼭 추천하는 책이다. 아니 관심없어도 개발자를 꿈꾼다면 꼭 읽어봤으면 좋겠다.
다양한 프로그래밍을 하다보면 개념이 약해질 때가 있는데, 그때마다 용기를 주는 소중한 책인 것 같다.