본문 바로가기

책을읽자

[한 번 읽으면 두 번 깨닫는] 객체 지향 프로그래밍 - 첫 인상 리뷰

반응형
객체지향 프로그래밍 - 8점
김동헌 지음/e비즈북스

프로그래밍을 공부하면서 객체지향이라는 표현을 누구나 들어보았을 겁니다. 하지만, 생각보다 객체지향이라는 개념에 대해서 본격적으로 다루는 교재는 찾아보기 어렵습니다. 네이버 책 섹션에서 "객체지향 프로그래밍"이라는 키워드로 검색했을 때 가장 먼저 검색되는 책이 이 책이라는 점에서도 알 수 있습니다. 물론 특정 언어와 "객체지향"이라는 키워드를 함께 묶어서 설명하는 책들은 많이 있습니다. 하지만, "객체지향" 그 자체를 본격적으로 설명하는 책은 많지 않다는 겁니다 (저도 검색해보고 깜짝 놀랐습니다. 이런 키워드로 왜 아무도 책을 펴내지 않은 거지 싶어서)

 

저자와 편집자의 의도였는지는 모르겠지만, 어찌되었든 "객체지향"이 본격적으로 주인공으로 등장하는 책으로서 이 책은 가치가 있습니다. 프로그래밍 언어를 공부하다가 "객체지향 프로그래밍"이 뭔지 궁금해하는 학습자들은 자연스럽게 이 책을 만나게 될 테니깐요~

 

하지만, 개인적으로는 타이틀보다는 부제가 더 맘에 와 닿았습니다. "한 번 읽으면 두 번 깨닫는"이라는 문구 말이죠. 이 문구를 딱 보고 떠오른 노래가 있습니다. 바로 "안 좋을 때 들으면 더 안 좋은 노래"입니다. 2012년 정형돈과 데프콘이 발표한 이 노래는 실시간 차트 탑을 차지하며 꽤 오랫동안 시장을 주도한 노래입니다. 무려 통신사 광고에서도 패러디되었죠.

 

이 노래의 마지막 부분은 다음과 같습니다.

듣지마 우리노래 듣지마
듣지마 진짜 듣지마 듣지마
이 노래 얼마 안남았다 듣지마
이러다 다 듣겠네 진짜..

노래의 시작부터 계속 노래를 듣지 말아야 하는 이유들을 이야기하는데, 결국 마지막까지 다 듣게 되는 노래입니다. 이 책도 마찬가지죠. 개념을 설명하는 책을 읽는 것은 쉽지 않습니다. 일단 뭔가 시작부터 지루합니다. 하지만, 이 책은 부제에서 이야기하는 것처럼 한 번 읽으면 두 번 깨닫게 해 줍니다(물론 저자 또는 편집자의 주관적인 의견입니다만). 다른 말로 풀어보면 다른 책 보다 2배의 속도로 학습을 할 수 있다는 이야기입니다. 그 비결은 반복에 있습니다.

주요 개념 설명의 반복

다행히 좋은 소프트웨어를 만드는 원칙은 간결하게 한 문장, 두 가지 권고사항으로 정리할 수 있다.
'관계의 의존성은 낮게, 기능의 집중도는 높게' 
- 23페이지, 발상의 전환 중에서

이 문장이 나오기 전에 배경이 되는 설명을 간략하게 풀어내었고, 이다음 페이지부터 다시 의존성과 집중도는 "낮은 결합도"와 "높은 응집도"라는 표현으로 반복되고 있습니다. 그리고 25페이지, 26페이지에서 정리를 해주고 있으며 실제 저자의 경험과 쉬운 비유를 통해 다시금 설명을 풀어내고 있습니다.

 

2배 빠른 속도로 학습할 수 있다는 것보다는, 같은 양을 학습했을 때 반복 학습이 된다고 하는 것이 맞을 듯합니다. 오히려 책을 읽으면서 반복되는 내용이 나오면 '어~ 이건 앞에서 다루었던 내용인데'라고 의심을 한다면 제대로 책을 학습하고 있는 겁니다.

 

그리고 또 하나의 비결은 저자의 경험입니다. 요즘 출간되는 책을 많이 접해본 건 아니지만, 자신이 만든 소프트웨어의 경험을 그대로 책에 녹여내는 경우는 많지 않습니다. 뭔가 샘플 코드를 제시하더라도 책을 위한 샘플을 만들다 보니 현실 세계의 경험과 동떨어진 이야기가 나오는 경우가 많습니다. 개념 설명 상으로는 틀린 건 아니지만, 진짜 이렇게 쓰는 건가 싶은 이야기가 등장하죠. 하지만, 이 책은 저자의 경험을 그대로 담아내고 있습니다.

저자의 생생한 경험과 코드

예를 들어 현실 세계에는 없지만, 우리가 창조한 소프트웨어 중에 푸시 서비스가 있다. 푸시 서비스는 '내(서비스 업체)가 나의 앱 서비스를 사용하는 고객의 스마트폰으로, 보내고 싶은 메시지 발송을, 구글과 애플 푸시 시스템에 요청하는 서비스'다. 나는 푸시 서비스를 개발하면서 아래와 같은 객체를 만들었다.
- 94페이지, 객체지향의 넓이 중에서

'창조'라는 표현이 좀 오글거리긴 하지만, 개발자 입장에서는 어찌 되었든 없던 코드를 만들어낸 것이니 자신의 코드를 뭐라고 하든 큰 상관은 없습니다. 중간중간 저자의 코드와 경험에 대한 이야기는 이야기의 흐름을 도우면서 저런 일이 있을 수도 있구나~라는 점을 알 수 있게 합니다. 

 

"객체지향"과 같은 개념을 개발 경험이 많은 이들도 어려워하는 이유에 대해 저자는 기능 구현 중심의 개발 환경 때문이라고 지적하고 있습니다. 물론 자신이 맡은 업무 자체가 기능 구현만 요구하는 경우도 있기 때문에 이런 상황 자체를 옳지 않다고 할 수는 없습니다. 하지만, 자신의 능력을 키워나가기 바란다면 "발상의 전환"이 필요하겠죠.

당시 내 주변에서, 어떠한 상황에서도 객체지향적으로 우아하게(?) 개발하는 개발자는 10명 중에 1명도 보기가 힘들었다. 이렇게 중금 개발자들 또한 원래 기능 구현 중심적이거나 열악한 일정과 개발 환경 탓에 결국 기능 구현 중심으로 개발하게 된다. 
- 14페이지, 발상의 전환 중에서

이런 패턴이 반복되다 보면 10년이 지나더라도 그 자리에 머물 수밖에 없습니다. 블로그 "애자일 이야기"에서는 "단순히 반복한다고 해서 달인이 될 수 없습니다"라고 강조하고 있습니다(최근 출판된 "함께 자라기 - 애자일로 가는 길 / 김창준 / 인사이트"에 잘 정리가 되어 있습니다). 객체 지향을 공부하고 자신의 코드에 적용하는 것은 어쩌면 의도적으로 자신의 일에 난이도를 높이는 일이 될 수 있습니다(http://egloos.zum.com/agile/v/5749946 에서 'a2 난이도 높이기'를 참고하세요). 하지만 그 과정을 통해 자신을 수련할 수 있습니다.

 

저자는 일반적인 경우 기능 구현 중심 개발은 코드 품질 저하로 이어지고 이 패턴은 반복되어 영향을 미친다고 설명하고 있습니다. 당장 영향을 미치지 않더라도 언젠가 터질 수 있는 폭탄을 가지고 있는 것이지요.

살짝 아쉬운 단점

그럼에도 물론, 이 책에도 단점은 있습니다. 일단 전체적인 코드의 설명 예제는 비행기를 소재로 이야기를 풀어나가고 있습니다. 소재를 선택하는 건 저자의 취향이니 뭐 어쩔 수 없지만, 비행기에 딱히 관심이 없는 분들은 설명을 이해하는데 약간의 어려움을 겪을 수 있습니다. 이야기가 깊어질수록 비행기의 부품이나 소재 같은 이야기가 나오는데, 오히려 용어가 익숙하지 않아 책을 읽는데 어려움을 겪는 분들도 있을 것 같습니다. 뭐 어느 소재나 마찬가지겠지만, 좀 더 현실 세계에서 자주 만날 수 있는 소재였으면 하는 아쉬움이 있긴 합니다.

이번 리뷰에서는 책의 첫 인상만을 살짝 다루었습니다. 다음에 기회가 되면 이 책에서 정말 객체지향 프로그래밍에 대해 쉽게 이해할 수 있도록 설명했는지 살펴보도록 하겠습니다.

728x90