C++ API 디자인 (API Design for C++) 서평

http://book.naver.com/bookdb/book_detail.nhn?bid=7405945
https://www.amazon.com/API-Design-C-Martin-Reddy/dp/0123850037

올해 9월 중순~말쯤에 내가 회사에 입사하고 나서, 팀장님께서 읽으라고 던져주신 책이다.
C++언어를 이용해 API를 디자인하는 것에 대해 다루고 있다. 하지만, 비단 C++이나 API 디자인에 국한된 내용들은 아니다. 전반적인 소프트웨어 설계에 대해 영감을 얻을 수 있는 부분들이 많이 있다.

결론부터 말하면, 책이 굉장히 좋다...
    이 책은 C++언어 자체적으로 고급적인 문법이나 스킬적인 부분, 그리고 디자인패턴적으로 고급적인 내용들을 다루지는 않는다. 다만, 내가 느끼기에는 다른 책들과는 다르게 좀 더 '현실적인' 관점에서 어떻게 소프트웨어를 잘 설계하고 프로젝트를 진행할 수 있는지에 대해 다루고 있다는 생각이 들었다.

    "화려하고 기괴한, 마법같은" 과 같은 단어들은 이 책과 어울리지 않는다. 내가 이 책을 읽으면서 머릿 속에 떠올랐던 건 "투박하고 현실적인, 그렇지만 효과적인" 이런 단어들이다. C++쪽은 언어의 특성 탓인지 사용자들의 특성 탓인지, 다른 언어들에 비해 각종 기괴하고 마법같은 '언어적 기술'들이 많이 존재하고, 극단적으로 overhead를 없애거나 설계를 완벽하게 하려는 그런 점들이 많이 존재한다. 그런 것들은 기술적인 호기심을 자극하긴 하지만, 실제 팀내의 모든 사람들이 그것에 열의가 있거나 그것을 받아들일 역량이 있는 것은 아니기 때문에, 현실적으로 프로젝트에 적용하는 것이 쉽지 않다. 반면에 이 책은 그런 것들과는 다르게, 책 내용을 이해하고 활용하는데 고급적인 C++지식들이 필요하지 않고, 내용들이 상당히 유용하기 때문에, 진짜 현업에서 당장 적용할 수 있고, 당장 회사의 프로젝트와 팀에게 큰 도움을 줄 수 있을 것 같다는 생각이 들었다.
    책이 2011년 2월에 출판된 책이긴 하지만, C++11을 기반으로 하고 있진 않다. 물론, C++0x의 내용들이 약간은 반영이 되있긴 하지만, 아무래도 과거 C++98 시절에 쓰이던 (지금은 C++11언어차원에서 깔끔한 방법을 제공하기 때문에 불필요한) 스킬들이 몇 가지 보이긴 한다. 하지만 이 부분들이 크게 결점이 되진 않는다. 책에서 다루는 근본적인 내용들은 결국 현재에도 적용되는 내용들이기 때문이다.
    그리고 책을 읽으면서 또 좋았던 점은, 각종 개발자들의 말들을 많이 인용했다는 것이다. 스캇마이어스, 허브서터등과 같은 개발자들의 명언(?)들이 많이 수록되어 있어서 은은한 감동을 준다.. 그리고 이 것을 통해, 이 책의 저자가 책을 쓸 때 얼마나 많은 자료를 참고했는지 알 수 있었다.
    그리고 책에 예제가 굉장히 많다. 개인적으로 좋은 책의 기준들중에 가장 중요한 것이 바로 예제라고 생각한다. 예제없는 설명은 마치 근거없는 주장과 같이 아무런 설득력을 지니지 못한다. 그런 측면에서, 이 책은 충분한 예제가 실려있기 때문에 저자가 전달하고자 하는 것을 이해하는 데 많은 도움이 된다.

    C++을 사용하는 모든 개발자들에게 이 책을 추천하고 싶다. 특히 추천하고 싶은 독자층은 "C++개발에 어느정도 경험이 있는 대학생" 이다. 대학생때는 프로젝트를 진행하더라도, 그것이 상업적이거나 범용적으로 쓰이는 수준까지 가지 않는 경우가 많다. 따라서, 기능자체는 어떻게든 구현하겠지만, 프로젝트를 진행하고 설계하는 측면부터해서 특히나 테스트와 문서화 측면에 대해서는 많은 고민을 하지 않을 가능성이 크다. 그런 분들에게 이 책은 설계, 테스트, 문서화 측면에 대해서 좋은 입문서와 촉진제가 될 것이라고 생각한다. 사실 실제 회사들도 이런 측면들에 대해서 신경을 쓰는 회사는 많이 없어보이기 때문에 (특히나, C/C++쪽에서는 더욱), 이것이 비단 대학생에만 해당되는 말은 아니긴 하다.

    아무튼, 책을 읽으면서 내가 평소에 혼자 생각하거나 고민했던 것들을 시원하게 긁어주는 느낌을 많이 받았다. 그리고 책을 읽는다는 느낌보다, 책의 저자와 소프트웨어 품질을 향상시키는 방법에 대해 신나게 수다를 떨고 있는 것 같다는 느낌을 많이 받았다. 책을 읽으면서 많은 영감을 얻은 것 같고, 상당히 많은 도움이 됐다. 나는 번역서를 읽었는데, 번역도 개인적으로 만족스러웠다. 내가 가장 인상깊었던 챕터는 "챕터 4. 설계" 이다. 디자인패턴적인 부분이나 C++스킬적인 부분같이 디테일하고 좀 더 코드레벨에 가까운 내용들은 기존에 내가 공부했거나 알고있는 내용들이 많았다. 하지만, 챕터 4의 초반부분들 (유즈케이스 같은 부분)은 내가 거의 다뤄본 적 없던 부분들이여서, 나에게 많은 영감을 주었다. 챕터 4는 나중에 한번 더 읽어야겠다는 생각을 하고 있다.

마지막으로 책의 내용중 일부를 인용하면서 서평을 마무리하고 싶다.
마이클 페더스는 레거시 코드를 단순히 오래된 코드가 아닌 테스트 코드가 없는 것으로 정의했는데, 우리는 여기에 주목할 필요가 있다. 이 정의에 따르면 여러분은 오늘날에도 레거시 코드를 작성하고 있을수도 있기 때문이다.

댓글