본문 바로가기
나의 서재

[책]C++ 템플릿 가이드

by esstory 2009. 7. 23.

C++ 템플릿 가이드 - 10점
니콜라이 M. 조슈티스, 데이비드 반데보드 지음, 한정애 옮김/에이콘출판

오랜만에 읽은 책입니다. 너무 오랫동안 큰 프로젝트에 투입되어서인지, 프로젝트가 끝나고도 예전 생활패턴으로 돌아가는 데 시간이 걸리네요. 다행히 요 몇 주 주말에 도서관에서 지내다 보니 이 책도 겨우 다 읽을 수 있었습니다.

C++ 처럼, 템플릿 역시 학교에서 제대로 배운 적은 없었습니다.  졸업할 때는 C 만 배우고 졸업했으니 ^^
프로그램 하다 보니 STL 이 필요하게 되었고
STL 책으로 열심히 공부하다 보니 template 의 기본적인 기능과 사용방법 정도는 익히게 되었습니다.
또 MS 의 ATL 을 활용한 COM 인터페이스 구현을 하다 보니 본의 아니게 ATL 소스를 깊이 있게 파고 들게 되었고, 엄청난 template 상속 체인을 만나고 부터 템플릿을 이용한 상속과, 인터페이스 구현의 강제, 공통 인터페이스의 기본 처리를 위한 템플릿의 활용 등을 익히게 되었습니다. 하지만 제대로 템플릿만을 공부한 적은 이 책이 처음 입니다.

어찌 보면 이 책에 있는 내용 상당부분은 이미 활용하고 있기도 한 부분이지만, 내용을 깊이 알고 사용하는 건 아니었습니다.
그리고 이 책을 읽고 난 후에도 바로 활용할 수 있는 다른 부분이 떠 오르는 것도 아니네요. (몇 가지 설계 관련 아이디어가 떠오르긴 하지만, 며칠 더 시간을 두고 테스트 해 봐야 할 거 같습니다)
하지만, 근본을 정확히 알지 않고 사용하는 것과, 깊이 있는 내용을 이해하고 이를 바탕으로 새로운 코드 설계 방식을 활용해 나가는 것은 분명히 차이가 있다고 생각합니다.
더 많이 파고 들어 배울 수록 추후 활용에 많은 도움을 받을 거 같습니다. (하지만, 요즘 들어 거의 코딩을 하지 않다 보니, 써 먹을 기회가 있을 지 모르겠지만요)

이 책은 크게 3부로 이뤄져 있습니다.
1부에서는 함수 템플릿, 클래스 템플릿 등 템플릿의 기본을 이루는 내용들입니다. 기본이라고는 하지만 클래스 템플릿의 특수화 같은 내용들은 제대로 알 지 못한 부분이었는데 1부를 공부하게 되면서 알게 되었구요. 기존에 알고 있는 지식도 좀 더 깊이 이해할 수 있었습니다.

2부는 템플릿 상세 설명입니다. 너무 기술적인 부분이 많이 들어 있고 (사실 이 책 여러 군데에서 대학 논문에서도 볼 법만 복잡한 설명들이 너무 많아 머리가 쥐가 납니다 ) 재미가 없는 부분이라 대충 훑어만 봤습니다. 안 그러면 진도가 안 나가서요.~ 책을 거의 다 읽고 나면 이 부분은 다시 천천히 살펴볼 예정입니다.

3부는 템플릿과 설계를 다루는 장입니다.
3부가 핵심인데, 역시 3부를 제대로 이해하려면 1부와 2부 내용을 잘 봐야 하더군요.
개인적으로 이 책에서 가장 자극을 많이 받은 내용은 14장 템플릿의  다형성 능력에 관한 내용이었습니다.
C++ 의 상송을 통한 다형성과는 달리, 템플릿에 의한 정적 다형성구현 방식은 앞으로 구현해야 할 코드의 설계에 새로운 기준을 제시해 줬습니다.
템플릿을 구현하다 보면, 인터페이스를 자연스럽게 강요할 수 있다는 것은 STL 이나 ATL 소스를 보면서 이미 알고 있었지만, 책을 통해 템플릿을 이와 연관되게 활용할 수 있는 방법을 읽어 보니 좀 더 머리속에 정리가 잘 되는 것 같습니다.
템플릿의 정적 다형성이 C++ 의 동적 다형성을 전부 다 대신할 수도 없고, 한계도 있다는 것도 이 챕터에서 얻은 좋은 소득이었습니다.
원칙상 STL 등의 접근 방식과 유사한 기능은 동적 다형성으로 구현될 수 있다. 하지만 실제로는 가상 함수 호출 메커니즘에 비해 반복자가 훨씬 간편하기 때문에 동적 다형성은 거의 사용되지않는다. 가상 함수에 기반한 인터페이스 계층을 추가한다면 단위가 달라질만큼 연산 속도를 많이 떨어뜨린다.
일반 프로그래밍은 정적 다형성에 기반하고 있기 때문에 인터페이스를 컴파일 시에 해석할 수 있어 매우 실용적이다. P 242
3부의 다른 장에서는 특질이나, 정책 등 템플릿의 중요 속성과 행동을 관리하는 요소들에 대한 설명, Visual Studio 2008 SP1 에서 부터 지원되는 tuple 의 구현 방법 등 템플릿과 이를 이용한 다양한 구현 방법이 소개됩니다.

책 전반적으로는 템플릿에 대한 기본에서 부터 약간의 활용부분까지 꽤 괜찮고 좋은 내용으로 이뤄졌다고 생각합니다.
다만 워낙 template 과 그와 관련된 용어들이 복잡하다 보니 한글 번역 시에 잘 이해하기 힘든 부분이 많았고, 어떤 부분은 두번 세번 읽어도 이해가 안가서 그냥 넘어 간 경우도 일부 있었습니다.
그리고 template 을 언어적으로 구현하는 사람에게나 필요한 설명들이  너무 많다는 생각도 좀 들었습니다. 저 같은 어플리케이션 만드는 사람들은 템플릿의 주요 기능이 어떻게 구현 되었는가보다는 이를 활용한 설계나, 개발 방법 예제가 더 많았으면 좋았을텐데 그런 부분들이 아쉽네요.
여튼 책에서 가르쳐 주는 내용만으로도 이 책의 가치는 충분합니다.

C++ 에서 interface 를 이용한 상속(파생클래스)못지 않게 템플릿을 통한 일반 프로그래밍 설계가 코딩에 얼마나 중요한 지 다시 알게 되었고 공부를 하면 할 수록 고민할 거리는 더 늘어 난다는 생각을 가지게 됐습니다.
이 책은 조만간 다시 읽고 내용을 잘 정리해 봐야겠네요. 


댓글