[책]The C++ Programming Language

2008.07.09 22:58나의 서재


사용자 삽입 이미지


C++ 의 역사가 오래된 만큼 C++에 관한 수많은 책들이 시중에 나와있습니다.

언어의 기본에 대한 설명을 하는 책들이 대부분이지만, 3, 4년 이상 C++ 을 현업에서 사용해 본 개발자를 위한 제대로 된 책은 사실 드뭅니다.


오늘 소개할 The C++ Programming Language중급 이상 개발자가 반듯이 읽어야 할 책 중 하나입니다.  다시 강조드리지만 이 책은 C++ 에 대한 중급 이상의 지식이 필요합니다. 1,000 페이지가 넘는 두꺼운 책이긴 하나 기초 문법에 대한 내용은 워낙 짧게 설명하고 넘어가기 때문에 이 책으로 C++ 을 처음 공부하기는 힘듭니다. 게다가 처음부터 나오는 예제에서 컴파일러의 파서를 간단하게 구현하는 등 비전공자이거나, C++ 에 대한 이해가 부족한 경우 초반부터 이거 뭥미 할 수도 있습니다.

 

감히 발음조차 하기 힘든 C++의 창시자이신 비야네 스트롭스트룹(Bjarne Stroustrup) 이 쓴 것으로도 유명한 이 책은 1,200 페이지가 넘는 어마어마한 분량에 C++ 의 간략한 기초 설명으로부터 클래스, 템플릿, STL, 대규모 개발을 위한 개발과 설계에 이르기까지 실로 엄청난 내용들이 실려 있습니다.



 

C++ 프로그래밍 언어 - 10점
비야네 스트롭스트룹 지음/피어슨에듀케이션코리아



이 책이 일반적인 C++ 서적들과 다른 가장 큰 차이점은 한 Chapter 의 마지막을 바른 프로그래밍을 위한 고수의 조언으로 장식한다는 점입니다.

C++ 의 창시자가 해 주는, 수 많은 대규모 프로젝트를 통해 개발자가 고민해야 하는 분야가 무엇인지 콕콕 짚어내는 그의 조언들은 사실 42,000 원이라는 책값이 아깝지 않을 만큼 좋은 내용들이 많습니다.

 

책의 서두에 있는 아래 내용은 매일 아침 코딩을 하기 전에 꼭 읽고 싶을 정도로 C++ 현업 개발에 도움이 되는 내용입니다.

 

프로그래밍이란, 어떤 문제에 대한 해결책 안에 여러분의 아이디어를 구체적으로 표현한 문장을 넣는 것이다. 프로그램의 구조는 이런 아이디를 최대한 직접적으로 드러내도록 하자.

 

  • 별도의 아이디어로 생각되는은 클래스로 만든다.
  • 별도의 개체(entity)로 생각되는은 클래스의 객체로 만든다.
  • 공통의 인터페이스를 가지면, 이 인터페이스는 추상 클래스로 만든다.
  • 두 클래스의 구현코드가 주요 부분에서 똑같으면, 공통된 부분을 뽑아 기본 클래스로 만든다.
  • 객체의 컨테이너가 될 클래스는 템플릿으로 만든다.
  • 컨테이너에 대한 알고리즘을 구현하는 함수는 동일 계열의 컨테이너군에 모두 적용할 수 있는 알고리즘을 구현하는 템플릿 함수로 만든다.
  • 어떤 클래스, 템플릿이 서로 논리적으로 가까운 관계를 가지고 있으면 이런 것들은 공통의 네임스페이스에 넣는다.


p68 

 

개인적으로는 몇 년 전에 이 책의 12장 파생클래스에서 인터페이스 설계에 대한 큰 가르침(^^)을 받아 이를 업무에 적용한 후 대규모 어플리케이션 개발에 큰 도움을 받았습니다.

 

 

12장의 파생클래스에는 다음과 같은 조언이 있습니다

.

  • 타입 필드는 반드시 피할 것.
  • 복사 손실(slicing)을 피하려면 객체의 포인터 혹은 참조자를 사용해야 한다.
  • 깔끔한 인터페이스 제공에 목적을 두고 있다면 추상 클래스를 사용하자
  • 인터페이스를 최소화하려면 추상 클래스를 사용하자.
  • 인터페이스로부터 구현 세부사항을 차단하려면 추상 클래스를 사용하자.
  • 사용자 코드를 건드리지 않은 채로 기존 함수의 구현코드를 새로 추가하려면 관련 함수들이 가상 함수로 되어 있어야 한다.
  • 사용자 코드의 재컴파일을 최소화하려면 추상 클래스를 사용하자.
  • 구현 세부사항이 여러 개가 될 수 있는 경우를 허용하려면 역시 추상 클래스를 사용할 것.
  • 가상 함수를 가진 다형성 클래스에는 반드시 가상 소멸자가 있어야 한다.
  • 추상 클래스에는 대개 생성자가 필요 없다.
  • 겹치지 않는 개념들은 내부 표현 데이터도 반드시 분리해 놓도록 하자.

P444

 

저는 이 책을 원서에 이어 한글판까지 두 권째 구입했습니다.

몇 년 전에 원서를 구입해서 도서관에서 줄 그어 가며 열심히 공부했지만, 짧은 영어 덕에 - 게다가 이 책의 영어는 뭔가 좀 어려웠습니다. 뭔지 잘 모르지만 - 전부 다는 보지 못하고 그나마 제가 부족한 부분들만 보고 말았습니다.

그러다가 곽용재님이 번역한 - 이 큰 책을 번역하려고 얼마나 고생했을까요. 이렇게 좋은 책을 번역해 주신 역자님께 감사드립니다 - 번역판을 만났습니다. 이미 원서가 있었기 때문에 책을 사야 하나 고민하다가 차일피일 구매를 못하고 있었는데, 때마침 알라딘 TTB 이주의 리뷰에 당선되면서 적립금 5만원 꽁돈으로 구입하게 되었습니다.

역시 한글 책으로 보니 정말 진도가 빠릅니다.

일본에서는 영어로 된 원서를 읽지 않아도 될 만큼 많은 책들이 일본어로 번역된다고 하던데, 한국에도 좀 더 빨리 많은 번역 책들이 나와주어 저 같이 영맹인 사람들에게 도움을 주었으면 좋겠습니다.

 

마지막으로, 더 많이 알수록 더 멀리 보입니다. C 만으로도 충분히 코딩할 수 있을 것이고 STL 이나 템플릿을 몰라도, 복잡한 상속이나, 인터페이스를 몰라도 당장 밥벌이는 할 수 있을 것입니다.

하지만 최고는 될 수 없습니다. 내가 사용할 수 있는 도구가 더 많을수록 만들어 낼 수 있는 그릇은 다양해 지고 내가 얼마나 더 깊이 있게 아느냐에 따라 시스템의 성능을 좌지우지 할 수 있습니다.

그런 면에서 이 책은 C++ 그 자체에 대한 깊은 고민을 하게 해 주고 더 넓고 먼 바다로 나가게 해 주는 길 잡이 같은 책이라고 생각합니다.

 

이 정도로 했는데 아직 안 보신 분들 언능 사세요 ^^;


사진들은 집에 있는 원서와 번역서를 같이 놓고 찍어 봤습니다.

원서는 종이가 워낙 얇고 빛나는 재질이라 낙서하기도 조심스러웠는데, 번역서는 종이도 일반 종이고 글씨도 조금 커졌습니다. 책의 샘플은 모두 이탤릭으로 되어 있는 점도 일반 C++ 책과 차별되네요

  • 프로필사진
    BlogIcon archmond2008.07.09 23:27 신고

    저도 팍팍 내공이 늘고 싶네요.

  • 프로필사진
    BlogIcon 오스카2008.07.10 10:21

    한글판이 4.2만이나 하나요? 이상하네... 원서(international ed.)가 3.x 였던 거 같은데... 잘못 기억하고 있는건가;;;

    • 프로필사진
      BlogIcon esstory2008.07.10 12:26 신고

      http://www.aladdin.co.kr/shop/wproduct.aspx?ISBN=8945072047
      보통 책값 할일은 하니까 3.x 대로도 구입가능할 거 같습니다.

  • 프로필사진
    BlogIcon Hwan2008.07.11 05:26

    저 책을 처음 봤을 때, '아~ The C Programming Language에 자극(?) 받은 책이구나...'라고 느꼈는데, 그 생각은 이후 'The Java Programming Language'를 보고 확신에 가까워졌습니다. ^^ Kernighan과 Ritchie 이후에 새로운 언어를 창시(?)하면 그런 제목의 책을 쓰는 것은 하나의 trend가 아닌가 싶습니다.

    제 책장에는 아직도 읽다 만 2판 원서가 꽂혀 있는데 얼마 전 하드커버 새판을 보고 사려다가 원서 가격에 망설였었죠. 제 기억에 교보문고에서 비교적 싸게 팔았던 것으로...

    • 프로필사진
      BlogIcon esstory2008.07.11 08:05 신고

      제목에 그런 깊은 사연이 ^^; 나머지 두 책은 읽어보질 못해서 저는 그런 생각까진 못했어요.

      저도 원서를 책장에 고이 모셔두고 전시용으로 활용하고 있습니다. 진도가 잘 나가지 않더라구요. 이번에 한글판 구입한 걸로 못다 읽은 부분 공부하려구요. 배워는 속도보다 잊어 버리는 속도가 더 빠르고, 예전에는 그냥 그런가 보다 했던 내용들도 다시 읽어보면 '이래서 저자가 이렇게 말하는 구나' 하고 깨닫게 되는게 많더라구요.

  • 프로필사진
    BlogIcon 김윤수2008.07.31 08:46 신고

    저도 요즘 이 책 파고 있습니다. 예전에 1st edition 인가를 영문으로 읽었는데, 지금 와서 보니 C++ 가 정말 많이 바뀌었더군요. 그래서 새로 공부하는 기분으로 열쒸미 보고 있습니다. 덧붙여서 The Design and Evolution of C++ 도 보고 있지요. 두 책을 같이 보니 재밌더군요.

    • 프로필사진
      BlogIcon esstory2008.07.31 08:57 신고

      책 서문중에 저자인 비야네 스트롭스트룹 아저씨도, 책을 쓰면서 자기가 모르는 C++ 을 새롭게 많이 알게 되었다는 내용이 있더라구요.
      평소에 자주 쓰지 않거나, 무지해서 모르는 C++ 의 깊은 세계가 너무 많아 보입니다. Evolution of C++ 책 괜찮으시면 좋은 서평 기대해도 될까요 :)