이해하기 쉬운 패턴 입문 - 미국 뉴저지 도노반 레비키
이 책은 지금 시점에서 꽤 오래되었다. 하지만 책에서 다루는 내용이 언어 레퍼런스를 목표로 하지 않았기에 나이를 먹지 않는다.
이 책은 언어 기본과 관련하여 몇 가지 금언으로 시작하는데, 예를 들어 상속과 다형성에 대해 아주 충분한 시간을 보내면서 쟁점의 핵심을 얻어내도록 한다. 초반부에는 단순한 관용구 예제를 몇 가지 소개한다(가상 생성자, 참조 횟수, 핸들-바디), 그리고 나서 다중 디스패치를 포함해 더 고급 주제로 넘어가며, 여태껏 보았던 책 중에서 프로토타이핑 패턴('exemplar')에 대해 가장 잘 설명하고 있다.
"패턴 위주 프로그래밍"을 위한 길을 찾고 있으며, "디자인 패턴" 책이 너무나도 어렵게 다가온다면, 이 책이 몇몇 구체적인 예제로 바로 시작할 수 있도록 당신을 이끌 것이다.
좀 오래되었지만 여전히 좋은 책 - 미국 뉴저지 다니엘 랜
이 책은 조금 오래되긴 했지만 아주 훌륭하다. "Effective C++"와 "More Effective C++"에 나오는 많은 항목을 더 세부적으로 설명하며, 일을 어떻게 처리하고 왜 이런 식으로 일을 해야 하는지 설명한다.
다양한 관용구에 대해 논하는데, 저수준 등가 패턴("Design Patterns"를 살펴보라)을 다룬다. 예를 들어, 바디/핸들 관용구는 브리지 패턴과 등가이며, exemplar는 프로토타입 패턴과 등가이며, 봉투/편지는 상태(state) 패턴과 연관이 있다. 정규 표준 클래스 꼴은 "C++ faqs"에서 "큰 세 가지"로 불린다. 클래스 File과 FileRef를 위한 오버 로딩 방식은 "More effective c++"에 제시한 읽기와 쓰기를 구분하기 위한 프록시에 대한 아이디어를 제공하지만, "More effective C++"는 제약 사항에 대해 더 세부적인 토론거리를 제공한다(지극히 정상적인 것이 "More effective C++"가 나중에 나왔다).
이 책은 각기 다른 스트링 구현 방식에서 나타나는 성능 차이에 대한 흥미로운 토의를 제공한다. 그리고 멤버 함수에 대한 포인터와 기능자, 가상 함수에 대한 관계를 논하며, 다형성의 위력을 설명한다. 10장에서는 C++에서 직접적으로 지원하지 않는 "동적 상속"에 대해 논한다(상태 패턴과 연관이 있다).
전체적으로, 이 책은 상당히 많은 C++ 아이디어를 제공하는데, 이는 나중에 나온 "(More) Effective C++"나 "Design Patterns"에 상당한 영향을 주었다.
이 책은 정말 책 같다. 반면, "(More) Effective C++"나 "Design Patterns"는 레퍼런스에 더 가깝다. 이 책은 각 장 끝부분에 연습문제가 있지만(답은 없다) "(More) Effective C++"나 "Design Patterns"에는 없다.
몇몇 논의는 흥미롭지만, 완벽하게 올바르지는 않다(이 책 출간 연도를 살펴볼 때 이해할 만 하다), 예를 들어, 스트링 클래스를 구현하기 위한 참조 회수를 설명할 때, 언제 이 관용구를 사용하면 안되며, 어떻게 개선할 수 있을지 나오지 않는다. "shared"와 "sharable"과 같은 플래그를 활용한 참조 횟수에 대한 심층적인 토론은 "More effective C++"를 참조하기 바란다. 자체 대입 검사는 좋은 방법이지만, 필요가 있는가? 그렇지 않다. 예전 메모리를 할당해제하기 앞서 새로운 메모리를 단순히 할당할 수 있다. 자체 대입 검사를 피한다면, 단순히 코드 성능을 증가시키는 이외에 예외적으로 안전성을 확보할 수 있게 된다.("Exceptional C++" 참조)
이 책에는 "More effective c++"과 "Exceptional c++: 47 puzzles"과 같은 책에서 찾아볼 수 있는 이름 영역, 예외에 대한 새로운 특질에 대한 토론이 빠져있다. "The C++ Standard Library : A Tutorial and Reference"에서 찾아볼 수 있는 STL 설명 역시 없다. 논리적인 상수성과 물리적인 상수성을 구분하기 위해 const 형변환과 mutable 형변환과 같은 새로운 스타일에 대한 설명도 빠져있는데, 이 책을 쓴 시점에서는 이런 표준이 아직 등장하지 않았기 때문이다.
명시적인 타입 변환은 더 이상 스트링을 위해 좋은 관례라고 생각하지 않는다("Exceptional C++"에 여기에 대한 비밀이 나온다). 또한, Circle이 Ellipse가 아니듯이 Imaginary도 Complex는 아니다("C++ faqs" 참조).
다시 한번 말하지만, 여기서 이 책에 대해 완벽한 설명을 할 수는 없다. 그러나 몇 가지 새로운 특질이 결여되어 있고, 내부에 있는 오류에 신경을 써야 하지만 이 책은 전반적으로 아주 뛰어나고 말할 수 있다. 더 많은 정보는 "(More) effective C++", "Design patterns", "Exceptional C++", "The C++ Standard Library : A Tutorial and Reference", "C++ faqs"를 참조하기 바란다.
정신적인 충격 - 미국에서 익명 독자
이 책은 C++로 결코 할 수 없다고 생각한 분야로 독자를 안내한다. 비록 몇몇 관용구는 낡았지만(이 책은 RTTI와 STL을 표준에 추가하기 전에 쓰였다), 그럼에도 불구하고 생각을 불러 일으키는 매우 값어치 있는 책이다.
실제로(!) 표현한 많은 아이디어는 독자들이 정말 완벽하게 이해하기에 앞서 고민하고 씨름해야 하는 과제를 안겨준다. 중/고급 C++ 프로그래머라면 누구나 읽어야 할 필독서이다. 책을 다 읽고 나면, C++의 위력을 훨씬 더 잘 완벽하게 느끼게 될 것이다.
아마존 서평