exceptional C++

@codemaru · August 21, 2006 · 4 min read

sutter 아저씨의 "C++ 코딩의 정석"에 감동 받고, 그의 책을 죄다 모으고 있습니다. 이것은 초창기에 나온 책인것 같은데 다소 산만한 느낌이 있습니다. 산만한 이유는 독자에게 문제를 제시하고 풀어나가는 과정을 재미나게 서술하는데에서 오는 것 같습니다. 정리가 덜 됀 느낌이 많이 듭니다. 물론 그런 점이 재미있긴 한데 정독하는데에는 더 많은 집중력을 요하는것 같습니다.

몇 장 빼고는 대부분 제가 잘 모르는 부분에 대한 재미난 사실들에 대해서 다루고 있었습니다. 몇 가지는 정말 기교적이라고 느껴질 만한 것도 있더군요. 역시 C++은 정말 언어 자체만 공부하는데도 끝이 없다고 느껴지게 만드는 책 입니다. 예외에 관해서 상세히 설명하고 있는 부분이 있는데 특히나 도움이 많이 되었습니다. 아직도 C++의 예외 시스템을 어떻게 활용해야 하는지 잘 모르겠지만 곰곰히 생각을 더 해봐야겠습니다.

가장 흥미로웠던 챕터는 pimpl 이디엄에 관한 챕터였습니다. 그동안 라이브러리 코드에서 종종 pimpl을 봤었는데 뭐지? 하고 궁금해 했지만 막상 찾아볼 생각은 안했는데 책에서 자세히 설명하고 있더군요. 간단히 설명하면 pimpl은 private 멤버를 구조체 포인터를 사용해서 숨기는 기법입니다. 이를 통해서 얻는 유일한 장점은 헤더에 의존적인 cpp 파일들이 private 변수를 수정해도 다시 컴파일 되지 않는다는 점 입니다. 따라서 private 변수 수정시에는 컴파일 할 항목이 굉장히 작아진다는 것 입니다. 물론 오버헤드가 있습니다. 생성/소멸이 pimpl을 할당/해제해야 하는 것이죠.

솔직히 컴파일 타임 때문에 이것을 사용해야 하는지는 의문이었습니다. 보통 회사에서 하는 모듈의 경우 크기가 크더라도 작성한 코드가 3만 라인을 넘지 않습니다. 3만 라인이라고 하더라도 컴파일 시간은 굉장히 짧죠. 전체를 새로 빌드하더라도 그다지 오랜 시간이 걸리지 않습니다. 잠시 생각할 시간 정도면 충분하죠. 이런 시간을 줄이기 위해서 저렇게 복잡하게 구현하고 할당/해제 오버헤드에 비용을 지불해야 한다는 것은 납득하기 힘들더군요. 어느 정도의 시스템이라면 컴파일 타임 때문에 저런 것을 쓸까? 하는 생각을 해보았습니다.

읽다가 오타를 하나 발견했는데 표시를 해두지 않아서 어딘지 모르겠군요. iostream을 잘 못 표기한 부분이 있었던 것 같습니다.

책은 재미있습니다. 몰랐던 사실도 많이 알려주죠. 하지만 다소 산만한 느낌은 지울수가 없군요. 문체가 다소 모호한 면도 없잖아 있습니다. 하지만 내용 만큼은 괜찮은 책 입니다. C++의 더 깊은 곳을 알고 싶은 분이라면 꼭 읽어보길 권해 드리고 싶습니다.

@codemaru
돌아보니 좋은 날도 있었고, 나쁜 날도 있었다. 그런 나의 모든 소소한 일상과 배움을 기록한다. 여기에 기록된 모든 내용은 한 개인의 관점이고 의견이다. 내가 속한 조직과는 1도 상관이 없다.
(C) 2001 YoungJin Shin, 0일째 운영 중