* 주관적인 생각으로 작성한 리뷰입니다.
계기
지금 진행 중인 객체지향 스터디의 첫 스타트는 ‘객체지향의 사실과 오해’를 읽음으로 시작됐다. 객체지향 개념에 대해 관심이 없었기 때문에 이 책이 유명하다는 사실도 몰랐다.
객체지향 개념에 관심이 없던 사람이니 당연히 나는 객체지향에 대해서 1%도 모르는 사람이었다. 참 모순이다. 객체지향에 관심이 없는 사람이 객체지향 프로그래밍 스터디를 하고 있지 않은가? 두번째 읽을 책이 스프링과 관련된 책이었기 때문에 그저 스프링에 관련된 스터디이겠거니 하고 단순하게 스터디에 참여하게 되었다.
이러한 이유로 나는 ‘객체지향의 사실과 오해’를 읽게됐다.
책을 읽기 전
계기에 말했다시피 나는 객체지향 개념이 한참이나 부족한 사람이었다. 그럼에도 개발이 되긴 했으니까.. (코드가 더러울지언정)
객체지향의 기본 요소인 상속, 다형성, 추상화, 캡슐화가 무엇인지는 알았다. 깊이 알지는 못했고, 면접에서 말할 수 있을 정도로의 사전적 정의(?) 정도로만 알고 있었다. 그래서 이 4가지의 개념이 왜 객체지향의 요소인지, 왜 이런 개념이 탄생하게 된 것인지는 모른 채 감히 직업이 개발자라며 떠들고 다녔다.
사실 책을 읽기 직전에도 이걸 꼭 알아야 할까? 라는 무서운 생각을 했다. 그럼에도 두번째 읽을 책인 스프링 책이 기대돼서 스터디 커리큘럼에 맞게 반강제(?)로 책을 읽게됐다.
객체지향의 사실과 오해 REVIEW
3일도 충분할 분량 하지만 내용은 아니다.
스터디 기간은 3주였지만, 회사에서 읽어서 그런지 실질적으로 3일 만에 다 읽은 책이었다. 양이 많지 않기에 충분히 짧은 시간 내에 읽을 수 있을 것이다. 하지만 책이 담고 있는 내용은 아니었다. 객체지향에 대해서 잘 알고 있는 개발자라면 모를까. 나같이 개발자긴 해도 객체지향 개념에 대해 잘 모르거나, 비전공자 같은 경우에는 3일은 부족할 것이다. (나같은 경우는 너무 추상적인 설명으로 느껴져 더 와닿지 못했음)
내용이 어렵다는 건 아니다. 정확히 말하자면 내용은 쉬워보이나, 적용이 어렵다. 쉬운 이해를 위해 앨리스의 이야기를 예제를 들어도 그 책에 있는 내용은 이해가 가나 이걸 직접 실무에 개념을 적용해보는 것이 어려웠다. 그래서 나는 ‘객체지향의 사실과 오해’ 정리본을 몇 번 더 읽어 볼 것 같다. 완벽하게 내 것으로 체득이 될 때까지. (끝까지 읽어 봤다면 7장에서 뭔가 와닿긴 할 것이다.)
N회독을 추천
보통 책이 잘 안 읽히면 같은 문장을 몇 번이라도 읽어보는데, 이 책은 그렇게 하기 보단 빌드업에 따른 이해가 이 책을 학습하는데 있어 도움이 되기에 N회독을 해보는 것이 효과적일 것이다.
사람들은 5장을 위한 책이라고 말하는데 나는 7장을 위한 책이었다는 생각이 들었다. 흩어진 퍼즐 조각을 전부 맞춘 것처럼 7장을 읽어보니 책에 나온 흩어진 개념들이 정리됐다. 7장에서 자바 소스로 직접 예제를 들어준 게 이해하기가 편했던 것 같다.
그래서 5장의 내용도 기억에 남지만, 7장이 더 기억에 남는 것 같다.
객체지향의 사실과 오해를 요약해보자면?
객체지향은 각 역할을 맡은 객체들이 자신의 책임을 다하기 위해 서로 협력하여 애플리케이션 기능을 제공하는 걸 말한다.
위 한줄에서 보이는 빨간글씨 [역할, 책임, 협력]은 이 책이 중요하게 여기는 요소이다. 그래서 그런지 역할과 책임, 협력에 대한 이야기가 온종일 이어진다. (이 요소는 곧 나중에 메시지로 이어진다)
객체는 책임을 가지고 있고, 그 책임에 따라 역할을 가지게 된다. 자신의 책임을 다하기 위해 요청과 응답, 즉 메시지를 다른 객체와 주고 받으며 협력에 참여한다.
그럼 이 책임은 어떻게 정할 것인가? 다른 객체와 주고 받는 메시지를 주목하면 된다. 어떤 메시지를 보내는지, 어떤 메시지를 수신 받는 지에 따라 객체의 책임이 정해지니까.
메시지를 고민할 때에는 추상적이게 생각해야한다. 그렇게 해야 객체가 메시지를 내부에서 처리하는 데 있어 자율적이게 된다.
이때 중요한 사실은 추상적인 메시지는 객체가 자율적인 책임을 갖을 수 있는 요소라는 것이다. 내 생각에는 이 개념들이 유기적으로 연결되는 것이 이 책의 핵심인 것 같다.
이런 개념적 내용이 5장까지 이어지다가 6장에서는 설계에 대한 방법(유스케이스, 도메인모델)이 나오고 7장에서는 이 전부를 아울러 자바 소스로 보여준다. 그래서 나는 7장이 인상 깊었다.
여담
책을 읽고 난 이후에는 스프링과 관련이 없는(없을 수가 없지만) 스터디일 지라도 객체지향 스터디에 참여하길 정말 잘했다는 생각이 들었다. 자바를 쓰지 않는 개발자라도 객채지향에 대해서 알고 있어야 된다는 생각까지 들었다.
실무를 보면서 들었던 가장 큰 고민은 이게 과연 올바른 코드일까 라는 고민이었다. 기능적으로 문제는 없었어도 이게 다른 팀원에게는 불편한 소스일 수도 있고, 유지보수 쪽으로 효율이 똥망일 수 있으니 말이다.
(이에 대한 생각은 https://memodayoungee.tistory.com/34 여담 쪽을 보면 자세히 나와있다.)
이 책을 다 읽어보니, 시원하게 등을 긁어준 정도는 아니었어도 내 고민에 대한 길라잡이가 되어준 것 같았다. 실무에 적용할 수 있는 방법은 더 연구해보고 찾아봐야겠지만, 이론만은 정돈된 기분이었다.
객체지향의 사실과 오해를 읽음으로써 객체지향에 대해 상당한 매력을 느끼게 되었던 것 같다. 더 깊게 공부하고 싶다는 욕심이 들기도 했다.
개발자라면 한번 쯤은 읽어봐야 될 책은 맞을 듯!(필독까지는 아니고) 설명은 친절하나 추상적인 건 감안하자! 그리고 반복되는 말이 너무 많음. 앨리스 얘기도 너무 길어서 사실 안 읽음. 책의 도입은 사실 잘 와닿지 않음. 문장력이 친절하지는 않음. 잘 안 읽혀서 같은 문장을 반복해서 읽기도 함.
'OOP > PTUStudy' 카테고리의 다른 글
3주차. 스프링 입문을 위한 자바 객체 지향의 원리와 이해 정리(1~6장) (0) | 2023.02.15 |
---|---|
2주차. 객체지향의 사실과 오해 정리(5~7장) (0) | 2023.02.04 |
1주차. 객체지향의 사실과 오해 정리 (1~4장) (0) | 2023.01.30 |
1주차. 객체지향 SOLID 원칙이란? (4) | 2023.01.30 |