본문 바로가기
나의 서재

[책]The C++ Programming Language

by esstory 2008. 7. 9.


사용자 삽입 이미지


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++ 책과 차별되네요

댓글