본문 바로가기
나/감상문

C++ 템플릿 가이드

by ehei 2010. 12. 22.

템플릿 라이브러리의 아름다움에 빠진 것은 내가 프로그래밍 공부를 시작하면서다. 정확히는 표준 템플릿 라이브러리(Standard Template Library, 이하 STL)을 만난 후이다. 간결함과 확장성에 뛰어난 성능까지. 진정으로 빠졌다. STL을 알고 나서 컨테이너를 구현하는 것은 바퀴 재발명에 지나지 않다고 생각했다. 그리고 언젠가 멋진 제네릭 프로그래밍을 펼쳐야지하고 다짐했었다. 그런 관계로 템플릿 프로그래밍은 항상 내 관심사 상위에 있었다. 이번에 읽은 책은 템플릿에 대해서는 고전으로 알고 있다. 2002년에 나온 책이니 최신이라고 보기는 어렵다. 그러나 템플릿에 대한 과거, 현재, 미래를 다룬 책으로 유명하다.

 

템플릿은 어찌 보면 마술같다. 인자도 반환형도 다른 함수 포인터를 컨테이너에 집어넣어보자. 컨테이너의 메모리 할당자나 정렬 정책 만을 바꾸고 싶을 때는 어떻게 해야하는가. 템플릿은 이런 문제들을 우아하게 해결한다. 데이터와 알고리즘을 분해할 수 있는 특성 덕분이다. 그렇다고 구현이 항시 아름다운 건 아니다. 백조도 물 밑에서 그다지 우아하다고 할 수 없을 것이다. 마찬가지로 다양한 상황을 해결하기 위해 난해한 코드를 만들어낸다. 또한 컴파일 시간 처리라는 특성이 디버깅을 어렵게 한다. 프로그래머는 디버거보다는 파싱이나 해주는 컴파일러와 두뇌에 의존해서 문제를 해결해야한다. 도구를 대입하기 어려운 것이다. 게다가 템플릿을 어렵게 하는 표현 양식들은 머리를 더욱 혼란하게 한다. 템플릿 템플릿이란 단어를 처음 봤을 때는 인쇄가 잘못된 줄 알았다. 이런 저런 사항들도 인해 영화 프레스티지 마냥 마술과 기술의 경계가 모호해진다. 가장 큰 문제라면 나만 템플릿을 이해하는데 그칠 경우이다. 유지 보수가 어려운 코드를 프로젝트에 남길 수 있기 때문이다. 내 코드에 의존하는 동료 또한 이해를 필요로 한다.

 

이런저런 단점에도 불구하고 템플릿이 굉장한 도구라는 사실은 변함이 없다. 단일 제어점 실현에 최상의 도구라고 생각한다. 그런 의미로 이 책에 많은 기대를 갖고 읽었다. 다 읽고 보니 어느 정도 소망치를 채운 것 같다. 고백하건대 내용은 정말 어려웠다. 진도가 하도 안 나가고 졸면서 본 적도 많다. 거진 2개월은 본 것 같다. 그럼에도 내용을 1/3이라도 이해했다면 자신을 칭찬해주고 싶을 정도이다. 어떤 예제는 용도 또한 짐작가지 않고, 한글로 써있음에도 알쏭달쏭할 뿐이었다. 모던 C++ 디자인의 당혹감이 부활하는 순간이었다. 조금 실망스러운 곳도 있었는데, 종종 컴파일러 의존적인 설명이 있는 부분이었다. 그리고 기교가 지나쳐 아무도 쳐다볼 엄두를 못 낼 예제들은 아쉬웠다. 반면 템플릿의 미래를 언급한 부분 - C++ 0x에 추가될 기능 설명은 저자들의 안목을 느끼게 했다.

 

앞으로 템플릿을 적극적으로 써 볼 예정이다. 제네릭 프로그래밍의 이상에 공감하는 자로서 행동하고 싶다. 한편으로 중용을 잊지 말아야 한다. 강렬한 만큼 그림자도 길게 드리우는 도구니까. 마침 다음에 읽을 책이 '인텔 스레딩 빌딩 블록'이다. 진행하는 스터디에도 적극적으로 써볼 곳을 찾을 예정이고 하니, 템플릿에 향한 나의 짝사랑은 한동안 이어질 것 같다. 이 책은 앞으로도 유용한 참고서로 계속 내 옆에 있을 것이다.




 

' > 감상문' 카테고리의 다른 글

세계 최고의 게임 크리에이터 9인의 이야기  (0) 2011.02.07
호밀밭의 파수꾼  (0) 2011.01.06
프로젝트가 서쪽으로 간 까닭은  (0) 2010.12.11
체 게바라 평전  (0) 2010.11.06
내몸 사용설명서  (0) 2010.10.18