사용자 삽입 이미지
 
Exceptional C++ Style : 40개의 새로운 프로그래밍 퍼즐과 문제 그리고 그 해답
 
저자: Herb Sutter 
역자: 류광 
출판사: 정보문화사
 
 
이전에 "C++ 코딩의 정석"이란 책을 주문하고 얼마있다 바로 예약도서로 주문한 책이다.
Herb Sutter의 Exceptional 씨리즈의 3번째 책으로서 전작 2권에 책에 비해 최근의 상황까지 잘 반영되어 있다. ( ISO C++03 의 내용까지 반영된 책이다. )
 
 
오.. 지쟈쓰..
이 책은 읽을수록 감탄이 절로 나온다.
내가 그동안 알고 싶어 하던 내용들에 대해 쏙쏙들이 자세히 설명을 해주고 있다.
우연성인가.. 시대의 대세인가..
Effective C++ 씨리즈를 읽었을때의 감동과 흡사하다.. 대단하다..
 
 
이 책에서 내용중 재미있게 읽은 부분
 
- 포맷팅 함수(객체)들의 사용 지침(sprintf, snprintf, stringstream, strstream)
- export의 역사적 배경, 한계 유용성의 문제
- 클래스의 설계시접근 권한의 사용과 오용, 캡슐화문제
- 상속의 가상성. 그리고 NVI(nonvirtual interface idiom)
- new의 예외 (과연 new의 실패시 무엇을 해야하는가? )
- 함정들..
 
 
솔찍히 전작인 "C++ 코딩의 정석" 에서는 그다지이 안왔지만 이 책에서는 간지러운 곳을 시원하게 긁어주는 내용들이 많다.
 
그중 한개만 뽑으라면 단연NVI(nonvirtual interface idiom)이다.
( 한글로 대략 번역된 내용:http://www.memorycarrier.com/old_www/y2k2/nvi.html )
 
 
약간 매너리즘에 빠져있다면 이책을 한번 읽어주는 것도 나쁘지 않는것 같다.

'책읽기' 카테고리의 다른 글

C++ Coding Standards: Rules, Guidelines, and Best Practices  (0) 2005.04.20
Modern C++ Design  (0) 2004.12.04
Effective C++  (0) 2004.12.02
사용자 삽입 이미지
 
 
C++ 코딩의 정석 : 101가지 규칙, 가이드라인, 좋은 습관들
 
저자: Herb Sutter , Andrei Alexandrescu 
역자: 최현호 
출판사: 정보문화사


C++ In-Depth 씨리즈 중에 한권인C++ Coding Standards번역서가 출간되었다.

저자의 이름만 보고도 구매가치가 충분하다고 느껴 바로 도서를 예약하고 어제 책을 받아 보게 되었다.

 

C++계의 지미 헨드릭스Andrei Alexandrescu와 C++ 표준위원회 일원이자 MS의 VC++팀의 소프트웨어 아키텍쳐로 근무하는Herb Sutter의 공동 작품이다.

 

물론 제목에서 알듯이 현란한 테크닉이나 패턴등을 다루는 책은 아니다.

C++적인 코딩하는 방법이나 C++적인 코드를 만들어 내는 101가지 지침서 같은 책이다.

 

저자들의 전작들에 비하면 하드코어적인면이 상당히 줄어 약간의 실망을 안겨줄수도 있지만 그 책들과는 약간은 다른 관점으로 목적들을 보고 있다.  머 그렇다고 그렇게 특별할꺼 까지는 없다.  

 

만약Andrei Alexandrescu의 하드코어책Modern C++ Design이나 Herb SutterExceptional C++씨리즈,Scott MeyersEffective C++씨리즈를 읽었다면 전혀 새로운 내용들은 아니다.

그리고 개인적으로Andrei Alexandrescu보다는Herb Sutter스타일이 느껴지는 책이다.

 

번역에 대해 얘기를 하자면 솔찍히 약간 맘에 들지는 않는다.

문장의 독해를 분석해 흐름을 얘기하는것은 내 능력 바깥의 얘기지만 단어 선택에서 맘에 들지 않는다.  그래도 머 읽을만은 하다.

 

 

그리고 이 책은 C++표준을 얘기하는 다른 책들에 비해 boost 같은 라이브러리에 대한 언급이 상대적으로 많이 나온다. (아닐수도 있다.. 내 눈에는 그렇게 보인다. ㅋㅋ)

이제는 어느정도 boost 같은 것은 준표준 같은 것으로 인정하고 사용 할때가 된것인가.. 그런거야!!

 

사실 개인적으로 boost 에서 얻을것은 많다고 생각한다.직접적인 사용은 아니더라고 구현물에 대한 내용은 훌륭하다.

그러나 회사에서 작성하는 코드에 대해서는 조심스럽다. 나 혼자 작성하고 관리하는 코드가 아니기 때문이다..

그런 부분 때문에 boost 같은 라이브러리를 쓴다는 것이 간단한 것 만은 아니다.

그러다 보니 ACE 같은건 생각도 못하고 있다.

( 몇일전 회사동료중에 한명이 정규식 라이브러리를 필요로 하여 boost::regex 를 컴파일하여 사용한적 있다. 그리고 난 VC++ 6.0 에선 항상 STLport를 깔아 쓰고 있다. 음하하.. )

 

어제 밤에 거의 반땅을 읽은거 같다.

이 책은 나에게 있어서 또 다른 의미는 정말로 오랜만에(한 6개월 쯤 됬나 -_-) 개발에 관한 책을 사서 보고 있다는 점이다.

 

중도를 지키자.. 냠냠

 

 

Herb Sutter :http://www.gotw.ca/

Andrei Alexandrescu :http://www.moderncppdesign.com/

Scott Meyers:http://aristeia.com/

 

boost:http://www.boost.org/

STLport:http://www.stlport.org/

ACE:http://www.cs.wustl.edu/~schmidt/ACE.html

 

 


'책읽기' 카테고리의 다른 글

Exceptional C++ Style  (0) 2005.05.16
Modern C++ Design  (0) 2004.12.04
Effective C++  (0) 2004.12.02
사용자 삽입 이미지

 

제목: 제네릭 프로그래밍과 디자인 패턴을 적용한 Modern C++ Design
저자: Andrei Alexandrescu 
역자: 이기형 
출판사: 인포북

 

 

하드코어를 원하십니까?

 

바로 이 책이 C++계의 하드코어 격인 책이다.
C++의 특징을, 그중에 template 쪽의 테크닉을 극대화 시킨 책이다.

 

C++에 대해 어느정도 이해 하고 있어야 하고 특히 template 부분을 이해 할수 있어야 책을 볼수 있다.

 

기본적인 구성은 저자인 Andrei Alexandrescu가 제작한 Loki - Boost, STLport, ACE 등의 라이브러리의 스케일은 아니지만 나름대로 인정받고 사용될 수 있는 라이브러리 이다. - 라는 라이브러리를 가지고 그 철학과 구성, 사용방법에 대해 설명해 나가는 방식으로 진행한다.

 

이 책에서 얻을수 있는 것을 한마디로 표현 하자면 "단위전략 기반의 클래스 디자인" 이다.

 

"단위전략 기반의 클래스 디자인"이란..
해당 객체의 쓰레드동기화 전략, 알고리즘에 관한 전략등과 같이 객체의 핵심기능 혹은 일부분 기능을 담당한는 객체를 주객체에 template 인자로 전달하여 template의 이점인 컴파일 타임에 타입을 결정하여 타입안정성및 동적 바인딩의 오버헤드를 줄이고 업무 로직을 위임하여 객체의 융통성및 성능을 향상을 가져오는 방법이다. (헥헥헥~)

 

간단한 예를 들자면 해당 객체가 Single Thread모드에서와 Multi Thread 모드의 동기화 행동을 해당 객체가 처리하는것이 아니라 template 인자로 넘겨 각각에 맞는 동기화방법을 결정 할수 있도록 융통성을 준것이다.

이런 방법들과 디자인 패턴이 만나 가장 C++적인 골격이 나오는 코드를 만들어 내는것이다.


1장은 "단위전략 기반의 클래스 디자인"에 대한 필요성과 설명에 대해 나오고
2장부터  머리에 아주 번뜩이는 아이디어로 무장된 라이브러리를 하나하나 설명 하는 식으로 진행된다.

 

물론 번뜩이는 아이디어 라고 표현을 했지만 뒷부분에 가면 갈수록 사실 머리에 약간 쥐가 날 정도로 쳐다봐야 이해가 간다.
그리고 최신 컴파일러가 아닌 이상 컴파일도 제대로 해내지 못한다.

다행이 내가 이책을 봤을 당시는 이것들을 컴파일 할 수 있는 최신 컴파일러들이 존재 했었고 Output에 대해 무리없이 확인 할수 있었다.


2장: 기본적인 타입을 확인하고 검사할수 있는 유틸리티 객체에 대한 설명이다.
3장: Typelist라는 타입들의 리스트을 담을 수 있는 구조를 template 으로 구현 하는것에 대해 설명한다.
4장: 풀링이 되는 작은 메모리 할당기를 제작한다.
5장: Command 객체를 이용한 일반화(제네릭) 방법에 대해 설명한다.
6장: 수명을 관리 할수 있는 싱글톤 객체에 대해 설명한다.
7장: 여러가지를 제어 할수 있는 스마트 포인터에 대해 설명
8장: 객체의 생성에 대한 설명

등등 ..


Andrei Alexandrescu의 이러한 비슷한 시도는 boost와 같은 라이브러리에서도 간간히 선보이고 있다.


직접 실무에는 이용해 보지는 않았지만 실무에 사용 가능 되도록 설계되었으므로 언젠가 한번 이용해 봄직 하다.
친철하게 구닥다리 VC++ 6 의 컴파일러에서도 실행할수 있도록 VC++ 6 버전용도 다른 사람에 의해 포팅이 되어 있다.

 

이 책에서 template template parameter 란것도 처음 봤다. -_-


모든 것은 여기서 확인 하라 !!

http://www.moderncppdesign.com/

 


'책읽기' 카테고리의 다른 글

Exceptional C++ Style  (0) 2005.05.16
C++ Coding Standards: Rules, Guidelines, and Best Practices  (0) 2005.04.20
Effective C++  (0) 2004.12.02
사용자 삽입 이미지

 

제목: Effective C++

원제: Effective C++: 50 Specific Ways to Improve Your Programs and Design

저자: Scott Meyers 
역자: 연승훈 
출판사: 대림


 

이책을 처음 접했을때 목차나 앞부분을 훑어본후 별로 감흥을 받지 못했다.
그도 그럴것이 책도 앏고 내용들고 뻔한 내용들 같았다.

 

그러나 이 책은 나의 뒷통수를 후려 갈긴 첫번째 책이 되었다.

 

다른 입문서와 틀리게 C++을 가르쳐 주는 책이 아니라 제대로 사용하기위한 기초(?) 지식들을 모아놓은 책이다.
C++은 문법을 알고 문법대로 코딩만 해서는 안된다고 가르쳐 주는 책이다.

 

번역된지는 좀 됬고 번역에 대해서는 나쁘지는 않지만 그리 썩 좋지도 않은 책으로 평가 되고 있다.
그러나 번역의 잘됨 여부에 관계없이 내용을 이해하는데에는 별 무리가 없는듯 하다.

 

C++ 고리타분한 입문서를 하나 읽었다면 바로 추천하는 바이다.

 

 


C에서 C++로의 전환
항목 1 #define보다는 const와 inline을 사용한다
항목 2 stdio.h 보다는 iostream을 사용한다.
항목 3 malloc과 free보다는 new와 delete를 사용한다.
항목 4 C++ 스타일의 주석을 지향한다.

 

이 챕터는 왠만한 C++책에는 다 있는 내용들이다.
뻔한 내용일수도 있지만 심호한 뜻이 있는 그런 챕터이다.

 

근본적인 주제는 C와 C++는 다르다 그러니 차이를 알아라 이다.

 


메모리 관리
항목 5 new와 delete의 사용시 동일한 형식을 이용한다
항목 6 소멸자에서 포인터 멤버에 대해 delete를 이용한 다.
항목 7 메모리가 모자랄 경우에 대비한다.
항목 8 operator new와 operator delete 작성시 관례를 따른다.
항목 9 new의 "정상" 형식을 감추지 않는다.
항목 10 operator new를 작성한다면 operator delete도 작성한다.


처음 이부분을 읽었을때 100% 이해 못하고 넘어갔다
그리고 이책의 후속작인 More Effective C++을 읽고 나서 이해하게된 챕터이다.

 

이 챕터의 주제는 new 키워드와 malloc 함수의 차이점을 이해하고 new를 사용함에 있어 이해하고 있어야 될것에대해 기술하고 있다.

그리고 사용자 형식(메모리 할당에 있어서)의 new 의 행동을 만드는것과
이책에서 처음으로 접했던 placement new 에 대해서도 선보이고 있다.

 

 

생성자, 소멸자, 그리고 치환 연산자
항목 11 동적으로 할당되는 메모리를 갖는 클래스를 위해서는 복사 생성자와 치환 연산자를 선언하라.
항목 12 생성자에서 치환보다는 초기화를 사용한다.
항목 13 클래스에 선언된 순서에 따라 멤버 초기화 리스트에 멤버들을 나열한다.
항목 14 베이스 클래스에서 소멸자는 가상 함수로 선언해야 한다.
항목 15 operator=이 *this에 대한 레퍼런스(reference)를 리턴(Return)하도록 한다.
항목 16 operator=에서 모든 데이터 멤버들로의 치환을 수행한다.
항목 17 operator=에서 재귀치환을 검사한다.


클래스를 설계함에 있어 기본이 되는 생성자, 소멸자, 그리고 치환연산사에 대한 내용이다.

생성자와 소멸자의 적절한 사용과 치환연산자에서 주의점에 대해 기술하고 있다.

 

여기서 중요한 내용은 "베이스 클래스용 소멸자는 가상이어야 한다"와 "생성자, 소멸자, 치환연산자는 같이 따로 생각할것이 아니라 같이 설계되어야 한다"는 점이다.

 


클래스와 함수: 설계 및 선언
항목 18 최소한의 완전한 클래스 인터페이스를 추구한다.
항목 19 멤버 함수, 비멤버 함수 및 프렌드 함수를 구별한다.
항목 20 데이터 멤버를 공용 인터페이스에 포함시키지 않는다.
항목 21 가능한 const를 이용한다.
항목 22 값에 의한 호출보다는 레퍼런스에 의한 호출을 선호한다.
항목 23 객체 반환시 레퍼런스를 반환하지 않는다.
항목 24 함수 오버로딩과 디폴트 인자값 중에서 주의깊 게 선택한다.
항목 25 포인터나 수치형 타입상의 오버로딩을 피한다.
항목 26 잠재적 모호성을 경계한다.
항목 27 의도하지 않은 내부 생성 멤버 함수의 이용을 명시적으로 막는다.
항목 28 전역 네임스페이스를 분할한다.


이 챕터는 클래스의 제대로된 설계를 위한 지침이다.

인터페이스를 설계시 주의 사항에 대해 기술하고 있다.

 

"최소한의 완전한 클래스 인터페이스를 추구한다"

 


클래스와 함수: 구현
항목 29 내부 데이터에 대한 "핸들"을 리턴하는 것을 피해라.
항목 30 접근하기 어려운 멤버에 대한 비상수 포인터나 레퍼런스를 리턴하는 멤버 함수 사용을 피하라.
항목 31 지역 객체에 대한 참조나 함수 내에서 new를 이용해 초기화된 포인터를 가리키는 참조를 리턴하지 말라.
항목 32 변수 정의는 가능한 뒤로 늦춰라.
항목 33 인라인을 선별적으로 사용하라.
항목 34 파일간의 컴파일 의존성(dependency)을 최소화하라.


이 챕터는 클래스의 특징중 은닉성에 대한 부분을 기술하고 있다.
그리고 몇개의 C++사용에 관한 지침들 ...

 

 

인스턴스와 객체지향 설계
항목 35 public 계승이 "isa"를 모델링하도록 하라.
항목 36 인터페이스 계승과 구현 계승의 차이점을 이해하라.
항목 37 계승된 비가상 함수를 재정의하지 않도록 한다.
항목 38 계승된 부재 인자값을 재정의하지 않도록 한다.
항목 39 계층도의 아래쪽 클래스로 다운캐스트(downcast )하지 않도록 한다.
항목 40 레이어링(layering)을 통해 "가지고 있는" 것과 "사용하여 구현된" 것을 모델링하도록 한다.
항목 41 계승과 템플릿과의 차이점을 이해한다.
항목 42 private 계승을 바르게 사용하라.
항목 43 다중 계승을 바르게 사용하도록 하라.
항목 44 의미하는 바를 표현하도록 하라; 자신이 표현한 것의 의미를 이해하도록 하라.

 

상속에 관한 내용이다.
목적에 맞는 제대로된 상속을 사용 할것과 상속시 지침에 대해 설명하고 있다.

 

그리고 템플릿과 상속의 차이점을 이해해 적절히 사용하라고 한다.

 

"인터페이스 계승과 구현 계승의 차이점을 이해하라."

 

 


미묘한 부분
항목 45 C++가 은밀하게 어떤 함수를 만들어주고 호출 하는지 이해하기
항목 46 실행 시간 에러보다는 컴파일 시간과 링크 시간 에러가 좋다.
항목 47 비지역 정적(Non-local static) 객체는 사용되기 전에 초기화되도록 해야 한다.
항목 48 컴파일러의 경고(warning)에 주의를 기울여라.
항목 49 표준 라이브러리를 잘 알아두어라.
항목 50 C++에 대한 이해를 넓혀라.
 

그리고 기타 못다한 얘기들이다.

주로 컴파일과 링크 그리고 C++의 표준이 되면서 (ISO C++) 추가된 것들에 대한 내용이다.

 

"C++에 대한 이해를 넓혀라"

 

 

 

이 책은 시작에 불과하다..

음하하

 

'책읽기' 카테고리의 다른 글

Exceptional C++ Style  (0) 2005.05.16
C++ Coding Standards: Rules, Guidelines, and Best Practices  (0) 2005.04.20
Modern C++ Design  (0) 2004.12.04

+ Recent posts