전문가를 위한 C/C++
< 서평 >
1장의 C++ 부딪혀 보기 내용을 보면, 전문가를 위한 C++ 이라는 책의 제목처럼 처음부터 세세히 설명하지
않고, 실제 작업 시에 필요한 내용만 치고 빠지는 치밀함을 보여준다. 그래서 이 책을 전체적으로 볼 때에
이미 C++을 어느 정도 알고 있는 사람이 다른 개론서를 보면 짜증을 유발하는 "처음부터 다시 시작"을
방지하기 때문이다. 예를 들면, 데이터 타입도 C++11에서만 달라진 내용, 일반적인 내용처럼 나누어서
하나의 차트로 간단하게 한 페이지를 장식한다. 불 필요한 찌꺼기는 없다. 심플함과 노하우를 내세운 책 답다.
NOTE_ 의 내용을 보면 마치 C++ How To Prgoram을 읽는 것처럼, 컴파일이나 디버깅 시에 유의할 점이
기재되어 있어 읽는 내내 즐거움을 준다. 이것이 왜 즐거움이냐 하냐면, 프로그래머에게 있어서 컴파일이나
디버깅 시에 발생하는 모든 이슈는 하나의 추억처럼 기억되는데, 이 책을 읽어가면서 이 추억들이 하나 씩
"아 맞어, 이건 이래서 이런 거지" 하고 머리 속에 되새겨 지기 때문이다.
* 근데 변숫값, 초깃값 하는 연음 발음은 왠지 아직도 적응이 잘 되지 않는다.
C++ 11에서 특징적인 내용 중에는 람다와 같이 자동 타입 값을 활용하여 프로그래머로 하여금 편안한 기능을
제공하는 반면에, 엄격한 타입 설정( EX- 엄격한 enum type - enum class )과 같이 미리 경고나 에러를 표시하여
보안성을 높이는 역할도 소개한다.
하지만 대부분의 프로그래머들은 엄격한 법칙 위주보다는 편리한 방법을 더 요긴하게 사용하지 않을 까 싶다.
C++11로 넘어오면서 내가 원하는 자동 기능들이 추가되어 (auto) 매우 기쁘다. 평소에도 반복되는 코드나,
여러 번 중첩되는 선언, 루프, 대입문등을 쓰기가 번거로워 템플릿을 좋아하는 편인데, 템플릿의 강력한 기능 중에
하나가 타입을 미리 정의할 필요가 없다는 것이다.
하지만 위험한 점은 이러한 기능들에 대해서 코드 보안성을 세심하게 유지하지 않으면, 자칫 편리하게 사용하려다
코드 상의 오류가 추가될 가능성이 있다는 점이다.
예를 들면, 잘 정의만 해두면 좋은 기능인 템플릿 조차도 실수로 type 관련 클래스, 함수들 정의를 잘못 해두면
자동변환되어 원하지 않는 값이 나오거나 기본 함수를 수행하게 되어 잘못 수행되는데, 이 때 아무래도 디버깅하기가 용이하지 않다는 점에 있다. 자동은 편하지만 그만큼 위험 부담이 있으므로, 반드시 다른 오용 가능성이
없다는 전제 하에 사용해야 한다.
이 책 내에서 잘 보지 못했던 문장이나 단어들이 많이 쓰이는 것 같아 참신하다. 가령, call by value는 passing by value라 칭하는 문장들이 있다, 없는 문장은 아니지만 주로 쓰이는 문장들은 아닌 것으로 알고 있다.
이 책의 구성은 참으로 훌륭하다고 할 수 있다. chapter 1에서는 가볍게 C++ 전반적 특징을 다시 연습할 수 있으며, chapter2에서는 실전용으로 프로그램 디자인, 추상화 재사용성, 코드 재사용, 오픈 소스 라이브러리 활용 등의
"실전"에서 사용할만한 이점을 알려준다. 만약 예전에 C/C++에 대한 기초를 뗀 이후에 이 책을 바로 봤다면
실력 상승은 물론 왜 프로그래밍 디자인이 중요한지를 알 수 있었을텐데하고 안타깝다.
또한, 각 chapter에서 간략하게 설명한 내용은 더 상세한 정보가 들어있는 페이지나 chapter에 대한 링크를
내포하여 무엇을 참조해야 하는지 견고하게 구성하였다.
단점이라고 본다면, 아무래도 전문가를 위한 책인것인지는 모르겠지만 문체가 너무 진지하다는 것이다.
그래서 자칫 지루해질 수 있고 하루에 많은 양을 보기에는 무리일 수 있다.
예를 들면, "조직 내부의 라이브러리를 이용할 때는 조직 내 정치나 역학관계 따위를 잘 이해해야 한다."라는
표현은 너무 진지하며, 전체적으로 이 책은 세세한 것 까지 모두 알려주려 하므로 딱딱하단 점이 있다.
예제에 대해 평가하자면, 일단 전 chapter에서 이론적인 것과 디자인( 설계 ) 적인 측면을 다루고 다음 chapter에서는
이를 구현하는 예제를 설명한다. 이러한 방식이 매우 꼼꼼하고 테이블로 정형화되어 있어 테크닉적으로
연습한다면 전문가에 이를 수 있는 길을 제시한다.
일반적인 서적들이, 설계와 구현을 쌍으로 지어 필요한 chapter마다 ~에는 ~가 필요해서 ~를 구현한다 식으로
되어 있는 것에 비해 획기적인 추상화-구현 연습 방식이라고 볼 수 있다.
이 서적을 공부하는 것 자체로 전문가가 실전에서 사용하는 디자인하고 구현하는 방식을 배울 수 있다.
이 책 또한 객체 지향적으로 쓰여졌다고 볼 수 있다. 개념적인 내용을 데이터화하여 미리 정의하고,
그에 대한 구현 및 설명을 후반부에 정의해놓았다. 또한 각 개념 별 구성을 앞 뒤로 꼼꼼하게 배치하며
연결 관계를 제시함으로써 잘 짜여진 하나의 객체로 볼 수 있다.
이 책을 쓸 때 저자가 얼마나 고심하여 구성했는지를 알 수 있다.
ex) 이 장에서는 코드 자체보다는 개념과 아이디어에 집중한다. c++ 객체의 문법에 대해서는 6,7,8장에서
자세히 다룬다.
실전적인면에서 보자면, 개발업무를 보고 나서 겪었던 많은 일들이 이 책에서는 예방 차원에서 여러 가지
조언으로 나타난다. 아래에 기술한 감상깊은 문구들의 내용들이 그것인데, 저러한 항목들은
실전에서 대응하기 전에 먼저 알아두면 시간 소비나 논리적인 사고에 의한 복잡도를 줄일 수 있다.
한마디로 말하면 삽질이 준다는 것이다. 그래서 오히려 역설적으로 저러한 상황을 겪어본 사람은 끄덕일 것이고
아니라면 그냥 조언으로 듣고 넘어갈수도 있다는게 역설적인 면이다.
각각의 설명에 대해서 부가 이유가 탁월하게 설명되어 있다. 물론 잘 알고 있는 사람은 요약적으로 보고싶을
수도 있겠지만 그 반대의 경우에 대해서는 적절하고 상세한 설명이 있어 이해하기가 쉽다.
장점이면서 단점일 수도 있겠지만 이 책은 극히 현업적이며 주관적으로 쓰여져 있어 저자의 주관적인
생각이 강하게 들어 있다. 그래서 어느 부분은 공감이 가지만 반대로 꼭 그렇지는 않은데 라고 따져볼 수도
있다. 하지만 책이라는 것이 사용자의 판단과 선택에 의한 내용 소화이므로 단점이라 보기 어렵다.
< 감상깊은 문구들>
1) HAS 관계와 IS - A 관계가 동시에 가능할 때 책 저자와 협력자들의 많은 경험을 토대로 하면, HAS 관계를
사용하는 편이 좀 더 합리적이다.
: 내외의 독립적인 구현으로 인해 변화에 능률적이지만 중복 코드의 단점이 있다.
2) 추상 슈퍼클래스를 제외하고, 서브클래스에 의해 많은 부분이 오버라이딩되는 슈퍼클래스의 도입은 피한다.
: 대부분이 오버라이딩 된다면 공통점을 잘못 찾아낸 것이고 슈퍼 클래스의 용도 자체가 필요 없어진다.
이러한 경우 쓸데없이 클래스 계층만 늘어나 복잡도와 인터페이스 갯수만 늘어나고 효율이 떨어진다.
3) 좋은 API는 "쉬운 일은 쉽게, 단 복잡한 일도 가능은 하게"라는 말로 요약된다.
: MSDN에서 Windows API를 요약할 수 있는 단어이다.
각각이 단발적인 사용이 쉽게 만들어졌으며, API간의 조합에 의해 더 큰 기능을 복합적으로 사용할 수 있다.
또한, API에도 클래스와 같이 계층적 구조를 둚으로써 매우 합리적이다.
EX) CreateFile은 공통 슈퍼클래스 함수처럼 여기저기에 쓰이는 재료로 사용되어 복합적 기능의 기반이 되며,
그 자체로서의 단발적인 기능을 표현할 수 있다. 단 복합적 기능을 위한 가능성 때문에 매개변수가 상당히
많다는 것이 단점일라면 단점이지만, 사용자가 자주 사용하는 방식으로 랩핑해서 사용하면 상관 없다.
4) 최악은 그때그때 되는대로 기능을 추가하다보니 인터페이스가 엉망이 되어 버리는 상황이다.
: 실전에서는 정말 급한 경우를 제외하고서는 반드시 인터페이스는 신중해야 한다.
인터페이스를 일단 추가해놓고 외부에서 사용한 상태에서의 수정은 추가 전의 복잡도보다 몇 십배는
상승하며, 후회를 불러 일으킬 수 있다. 외부에서도 모두 고쳐야 하기 때문이다.
하지만 외부에서 정말 많이 사용하고 그 외부 라이브러리를 또 다른 곳에서 사용한다면 연쇄 폭탄이 된다.
5) 재사용 가능성에 대해 : 바퀴를 두 번 발명하는 일이 없도록 해야 한다.
.... 이하는 내용이 너무 많아 생략한다.
< 총평 >
전체적으로 기초적인 부분을 생략하는 부분이 많아 초보자가 읽기에 좋기에 좋은 책은 아니지만 전문가가 되고 싶어하는 초,중수 정도의 프로그래머가 읽으면 실력 상승에 도움이 되는 책임에 틀림 없다. 물론, 책이 대상 자체가
초보자를 위한 것이 아닌 전문가를 위함이라고 명시되어 있는 이유도 있다.
이미 전문가에게는 알고 있는 내용이라 지루할 수도 있을 수 있다. 다만 책 한권에 실전에서 사용하는
노다지 같은 노하우와 프로그램 전반(설계부터 활용, 출시, 협업 등)에 대한 내용을 알 수 있어
전문가가 되려는 독자에게는 꿀같은 책이다.
이 책은 저자가 정말 정성을 ( 생각을 하고 또 하고 해서 빠진 게 없을까, 중복되는 게 없을까 고민 )
들인 책이라는 게 읽는 내내 느껴진다.
이 책 두께가 결코 두껍다고 느껴지지 않는 것이 뭐 하나 버릴 내용이 없어서이다.
이 책은 비교하자면 정석책이며, 레퍼런스 책 종류는 아니다.
그래서 시간날 때마다 앞에서부터 차근차근 쭈욱 읽는 편이 제일 좋아 보인다.
후배에게 C/C++응용서를 추천하라면 이 책을 추천하겠다.
이 책의 이름을 다르게 네이밍 하라고 한다면 "C++ 실전 전략 & 노하우" 라고 붙이고 싶다.
하지만, C++을 사용하는 유쾌한 방법이 너무나 멋진 부제라 그냥 놔두는 편이 낫겠다.
< 추천 대상 독자 >
1) C/C++ 기본서/중급서 이상
2) STL 기본서 이상
3) 책 한권(2분권)으로 C/C++을 실전에서 사용하는 방법
( 설계, 디자인 패턴, 인터페이스, 구현, 응용, 에러 처리, 협업 ) 등을
알고 싶은 사람
< 비추천 대상 독자>
1) C++ 중급 이상의 문법서를 찾는 사람
2) C++ 규정이나 문법 관련 레퍼런스를 찾는 사람
( 필요한 부분만 보는 방식 )
** 한빛미디어 트랙백 :
http://www.hanb.co.kr/trackback/978-89-6848-038-6