똑똑한 프로그래밍을 위한 C++ 템플릿 가이드
해외주문/바로드림/제휴사주문/업체배송건의 경우 1+1 증정상품이 발송되지 않습니다.
패키지
북카드
키워드 Pick
키워드 Pick 안내
관심 키워드를 주제로 다른 연관 도서를 다양하게 찾아 볼 수 있는 서비스로, 클릭 시 관심 키워드를 주제로 한 다양한 책으로 이동할 수 있습니다.
키워드는 최근 많이 찾는 순으로 정렬됩니다.
이 책은 C++의 가장 강력한 기능 중 하나지만 그릇되게 알려지고 사용되온 템플릿에 대한 지침서다. 템플릿을 사용해야 하는 이유, 사용해야 할 시기, 그리고 사용하는 방법 등에 대해 명확히 알려줌으로써 깔끔하고 빠르며 멋진 소프트웨어를 효율적으로 만드는 데 도움을 건네고 있다.
특히 템플릿과 관련된 함정을 피하는 방법을 알려주면서, 고급 응용 방식도 가르쳐준다. 템플릿을 활용하여 유연하면서도 유지ㆍ보수가 쉬운 소프트웨어를 만드는 비결도 배울 수 있다.
작가정보
저자(글) 데이비드 반데보드
(www.vandevoorde.com)
에디슨 설계 그룹의 엔지니어다. 그는 ANSI C++ 표준 위원회에서 활동 중인 멤버이며, 뉴스 그룹 comp.lang.c++.moderated의 공동 창설자다. 브뤼셀 프리 대학과 렌슬러 공대를 졸업했으며, 알고리즘 개발과 프로그래밍 언어, 강의 등에 관심이 많다.
저자(글) 니콜라이 M. 조슈티스
(www.josuttis.com)
니콜라이 M. 조슈티스는 기술 컨설턴트로 통신, 트래픽, 금융과 제조업을 위한 객체 지향 소프트웨어를 설계하고 있다. C++ 표준화위원회 라이브러리 워킹그룹에서 활동 중이며, 『The C++ standard Library』(addison-Wesley, 1999) 등 C++와 객체지향 프로그래밍에 관한 많은 책을 썼다.
번역 한정애
서울대학교 컴퓨터공학과를 졸업하고 동 대학원에 재학 중이다. 현재 세부 전공은 무선 통신 분야이지만 리눅스와 리눅스 프로그램 등을 포함한 컴퓨터와 관련된 다양한 분야에 관심이 많다. 역서로 에이콘출판사에서 출간한 『리눅스 실전 가이드』(2007), 『리눅스 기반의 임베디드 제품 디자인』(2007)이 있다.
목차
- 1장 들어가며 1
1.1 책을 읽기 전에 독자가 알아야 할 것 2
1.2 이 책의 구성 2
1.3 이 책을 읽는 방법 3
1.4 프로그래밍 방식에 대한 몇 가지 언급 3
1.5 표준과 실제 5
1.6 예제 코드와 부가 설명 6
1.7 피드백 6
1부 템플릿 기본 7
2장 함수 템플릿 9
2.1 함수 템플릿이란 9
2.1.2 템플릿 사용 10
2.2 인자 추론 13
2.3 템플릿 매개변수 13
2.4 오버로딩 함수 템플릿 15
2.5 요약 20
3장 클래스 템플릿 21
3.1 클래스 템플릿 Stack의 구현 21
3.1.1 클래스 템플릿의 선언 22
3.1.2 멤버 함수의 구현 24
3.2 클래스 템플릿 Stack의 사용 25
3.3 클래스 템플릿의 특수화 27
3.4 부분 특수화 29
3.5 기본 템플릿 인자 30
3.6 요약 33
4장 데이터형이 아닌 템플릿 매개변수 35
4.1 데이터형이 아닌 클래스 템플릿 매개변수 35
4.2 데이터형이 아닌 함수 템플릿 매개변수 39
4.3 데이터형이 아닌 템플릿 매개변수에 대한 제약 40
4.4 요약 41
5장 복잡한 기본 43
5.1 키워드 typename 43
5.2 this-〉 사용 45
5.3 멤버 템플릿 46
5.4 템플릿 템플릿 매개변수 50
5.5 0 초기화 56
5.6 함수 템플릿에 문자열 리터럴을 인자로 사용 57
5.7 요약 60
6장 템플릿 실제 사용 61
6.1 포함 모델 61
6.1.1 링커 오류 61
6.1.2 헤더 파일에 있는 템플릿 63
6.2 명시적 인스턴스화 64
6.2.1 명시적 인스턴스화의 예제 65
6.2.2 포함 모델과 명시적 인스턴스화 결합 66
6.3 분리 모델 67
6.3.1 키워드 export 67
6.3.2 분리 모델의 한계 69
6.3.3 분리 모델에 대한 대비 70
6.4 템플릿과 인라인 71
6.5 전컴파일된 헤더 72
6.6 디버깅 템플릿 74
6.6.1 긴 오류 메시지 해석 75
6.6.2 얕은 인스턴스화 77
6.6.3 긴 기호 79
6.6.4 추적자 79
6.6.5 오라클 84
6.6.6 원형 84
6.7 정리 85
7장 기본 템플릿 용어 87
7.1 “클래스 템플릿”과 “템플릿 클래스” 87
7.2 인스턴스화와 특수화 88
7.3 선언과 정의 89
7.4 단정의 법칙 90
7.5 템플릿 인자와 템플릿 매개변수 90
2부 템플릿 상세 설명 93
8장 템플릿 기초 원리의 깊은 이해 95
8.1 매개변수화된 선언 95
8.1.1 가상 멤버 함수 98
8.1.2 템플릿의 링크 99
8.1.3 기본 템플릿 100
8.2 템플릿 매개변수 100
8.2.1 데이터형 매개변수 101
8.2.2 데이터형이 아닌 매개변수 101
8.2.3 템플릿 템플릿 매개변수 102
8.2.4 기본 템플릿 인자 104
8.3 템플릿 인자 104
8.3.1 함수 템플릿 인자 105
8.3.2 데이터형 인자 108
8.3.3 데이터형이 아닌 인자 109
8.3.4 템플릿 템플릿 인자 112
8.3.5 동일 113
8.4 프렌드 114
8.4.1 프렌드 함수 115
8.4.2 프렌드 템플릿 117
8.5 정리 118
9장 템플릿에서의 이름 119
9.1 이름 분류학 119
9.2 이름 룩업 121
9.2.1 인자 종속 룩업 123
9.2.2 프렌드 이름 주입 125
9.2.3 주입된 클래스 이름 126
9.3 템플릿 파싱 127
9.3.1 템플릿을 쓰지 않을 때의 문맥 민감성 127
9.3.2 데이터형의 종속 이름 130
9.3.3 템플릿의 종속 이름 132
9.3.4 using 선언에서 종속 이름 133
9.3.5 ADL과 명시적 템플릿 인자 135
9.4 파생과 클래스 템플릿 135
9.4.1 종속되지 않은 기본 클래스 135
9.4.2 종속적인 기본 클래스 136
9.5 정리 139
10장 인스턴스화 141
10.1 주문형 인스턴스화 141
10.2 게으른 인스턴스화 143
10.3 C++ 인스턴스화 모델 146
10.3.4 두 단계 룩업 146
10.3.2 인스턴스화 지점 147
10.3.3 포함과 분리 모델 150
10.3.4 여러 번역 단위에 걸친 룩업 150
10.3.5 예제 152
10.4 구현 방식 154
10.4.1 근시안적인 인스턴스화 156
10.4.2 질의 인스턴스화 157
10.4.3 반복된 인스턴스화 158
10.5 명시적 인스턴스화 161
10.6 정리 165
11장 템플릿 인자 추론 167
11.1 추론 과정 167
11.2 추론된 문맥 170
11.3 특별 추론 상황 172
11.4 허용되는 인자 변환 172
11.5 클래스 템플릿 매개변수 173
11.6 기본 호출 인자 174
11.7 바튼-넥만 트릭 175
11.8 정리 177
12장 특수화와 오버로딩 179
12.1 “일반적인 코드”가 별로 좋지 않을 때 179
12.1.1 보이지 않는 커스터마이징 180
12.1.2 의미 구조 투명성 181
12.2 함수 템플릿 오버로딩 183
12.2.1 서명 184
12.2.2 오버로딩된 함수 템플릿의 부분 정렬 186
12.2.3 공식 정렬 법칙 188
12.2.4 템플릿과 템플릿이 아닌 것 189
12.3 명시적 특수화 190
12.3.1 전체 클래스 템플릿 특수화 191
12.3.2 전체 함수 템플릿 특수화 195
12.3.3 전체 멤버 특수화 197
12.4 부분 클래스 템플릿 특수화 200
12.5 정리 203
13장 앞으로 나아갈 방향 205
13.1 꺾쇠 해킹 205
13.2 완화된 typename 법칙 206
13.3 기본 함수 템플릿 인자 207
13.4 문자열 리터럴과 부동소수점 템플릿 인자 209
13.5 템플릿 템플릿 매개변수의 일치 완화 211
13.6 typedef 템플릿 212
13.7 함수 템플릿의 부분 특수화 213
13.8 typeof 연산자 215
13.9 이름 붙여진 템플릿 인자 217
13.10 정적 속성 218
13.11 맞춤형 인스턴스화 진단 218
13.12 클래스 템플릿 오버로딩 221
13.13 목록 매개변수 222
13.14 레이아웃 제어 224
13.15 초기화 추론 225
13.16 함수 표현식 226
13.17 정리 228
3부 템플릿과 설계 229
14장 템플릿의 다형성 능력 231
14.1 동적 다형성 231
14.2 정적 다형성 234
14.3 동적 다형성과 정적 다형성 비교 237
14.4 설계 패턴의 새로운 형태 239
14.5 일반 프로그래밍 240
14.6 정리 242
15장 특질과 정책 클래스 245
15.1 예제: 수열 더하기 246
15.1.1 고정 특질(fixed trait) 246
15.1.2 값 특질 250
15.1.3 매개변수화된 특질 253
15.1.4 정책과 정책 클래스 255
15.1.5 특질과 정책: 무엇이 다른가? 257
15.1.6 멤버 템플릿과 템플릿 템플릿 매개변수 비교 258
15.1.7 다양한 정책과(이나) 특질 결합 260
15.1.8 일반 반복자를 통해 추적 261
15.2 데이터형 함수 262
15.2.1 요소의 데이터형 결정 263
15.2.2 클래스형 결정 265
15.2.3 참조자와 한정자 267
15.2.4 데이터형 승격 특질 270
15.3 정책 특질 273
15.3.1 읽기 전용 매개변수형 274
15.3.2 복사, 교환, 이동 277
15.4 정리 282
16장 템플릿과 상속 285
16.1 이름 붙여진 템플릿 인자 285
16.2 빈 기본 클래스 최적화 289
16.2.1 레이아웃 원칙 290
16.2.2 기본 클래스로서의 멤버 292
16.3 묘하게 되풀이되는 템플릿 패턴 295
16.4 매개변수화된 가상성 297
16.5 정리 299
17장 메타프로그래밍 301
17.1 메타프로그램의 첫 번째 예 301
17.2 열거형 값과 정적 상수 비교 303
17.3 제곱근 구하기 예제 305
17.4 유도 변수 사용 309
17.5 계산 완벽성 312
17.6 재귀적 인스턴스화와 재귀적 템플릿 인자 비교 313
17.7 루프를 풀기 위한 메타프로그래밍 314
17.8 정리 318
18장 표현식 템플릿 321
18.1 임시 루프와 루프 분할 322
18.2 템플릿 인자에 표현식 표현 327
18.2.1 표현식 템플릿의 피연산자 328
18.2.2 Array형 332
18.2.3 연산자 334
18.2.4 복습 335
18.2.5 표현식 템플릿 할당 338
18.3 표현식 템플릿의 성능과 한계 339
18.4 정리 341
4부 고급 애플리케이션 345
19장 데이터형 분류 347
19.1 기초형 결정 347
19.2 복합형 결정 350
19.3 함수형 식별 352
19.4 오버로딩 해석으로 열거형 분류 356
19.5 클래스형 결정 359
19.6 모두 다 함께 359
19.7 정리 363
20장 스마트 포인터 365
20.1 소유자와 전달 캡슐 365
20.1.1 예외로부터 보호 366
20.1.2 소유자 368
20.1.3 멤버로서의 소유자 370
20.1.4 자원 획득은 초기화다 372
20.1.5 Holder 한계 373
20.1.6 소유자 복사 375
20.1.7 함수 호출 너머로 소유자 복사 375
20.1.8 전달 캡슐 376
20.2 참조자 카운트 379
20.2.1 카운터의 위치 380
20.2.2 동시 카운터 접근 381
20.2.3 소멸과 할당 해제 382
20.2.4 CountingPtr 템플릿 383
20.2.5 간단한 비침습성 카운터 386
20.2.6 간단한 침습성 카운터 템플릿 388
20.2.7 상수성 389
20.2.8 묵시적 변환 390
20.2.9 비교 393
20.3 정리 394
21장 튜플 395
21.1 듀오 395
21.2 재귀적 Duo 401
21.2.1 필드의 수 401
21.2.2 필드의 데이터형 403
21.2.3 필드의 값 404
21.3 튜플 생성 409
21.4 정리 415
22장 함수 객체와 콜백 417
22.1 직접, 간접과 인라인 호출 418
22.2 함수에 대한 포인터와 참조자 421
22.3 멤버 접근 포인터 함수 423
22.4 클래스형 functor 427
22.4.1 첫 번째 클래스형 functor 427
22.4.2 클래스형 functor의 종류 428
22.5 functor 명시 430
22.5.1 템플릿형 인자로서의 functor 430
22.5.2 함수 호출 인자로서의 functor 431
22.5.3 함수 호출 매개변수와 템플릿형 매개변수 결합 432
22.5.4 데이터형이 아닌 템플릿 인자로서의 functor 433
22.5.5 함수 포인터 캡슐화 434
22.6 내부 점검 437
22.6.1 functor형 분석 438
22.6.2 매개변수형 접근 438
22.6.3 함수 포인터 캡슐화 440
22.7 함수 객체 조합 446
22.7.1 간단한 조합 447
22.7.2 혼합된 데이터형 조합 451
22.7.3 매개변수의 수 줄이기 455
22.8 값 바인더 458
22.8.1 바인딩 선택 459
22.8.2 바인드 서명 461
22.8.3 인자 선택 462
22.8.4 편의 함수 468
22.9 functor 연산: 전체 구현 471
22.10 정리 474
부록A 단 정의 법칙 475
A.1 번역 단위 475
A.2 선언과 정의 476
A.3 상세한 단정의 법칙 477
A.3.1 프로그램당 한 번 477
A.3.2 번역 단위별 한 번 정의 제약 480
A.3.3 교차 번역 단위 동등 제약 481
부록B 오버로딩 해석 487
B.1 오버로딩 해석이 적용되는 시기 488
B.2 간략화된 오버로딩 해석 488
B.2.1 멤버 함수를 위해 포함된 인자 491
B.2.2 완벽한 일치 개량 492
B.3 세부 오버로딩 493
B.3.1 비템플릿 선호 494
B.3.2 변환 순서 494
B.3.3 포인터 변환 495
B.3.4 functor와 대리 함수 496
B.3.5 기타 오버로딩 문맥 497
출판사 서평
〈 요약 〉
템플릿은 C++의 가장 강력한 기능 중 하나지만 너무나 등한시되고 잘못 알려져 있으며 잘못 사용되고 있다. 『똑똑한 프로그래밍을 위한 C++ 템플릿 가이드』는 템플릿을 왜 사용해야 하며, 언제 사용하고, 어떻게 사용해야 하는지 명확히 알려주므로 소프트웨어 설계자와 엔지니어는 좀 더 깔끔하고 빠르며 멋진 소프트웨어를 효율적으로 만들 수 있다.
이 책은 기본 개념과 언어 특성에 대한 직관적인 예제에서 시작한다. 그리고 언어의 상세 부분에 우선 초점을 맞춰 설명한 후 다양한 코딩 기술을 다루며, 마지막으로는 템플릿의 고급 응용방식을 알아봄으로써 광범위한 참고 자료로도 사용할 수 있게 했다. 책 전반에서 사용된 예제들은 추상적인 개념을 설명할 뿐만 아니라 최적의 응용 사례이기도 하다.
〈 소개 〉
이 책에서 가장 좋았던 점은 템플릿의 양면, 즉 템플릿의 구조와 사용법을 모두 보여준다는 점이었다. 디자인과 사용법을 모두 보여주는 책은 드물다. 예제들은 최상급일 뿐만 아니라 매우 간결하고 정말 잘 설명돼 있다.
- 패트릭 맥킬런, Vision 정보 컨설팅
독자들이 결코 알고 싶어 하지 않지만 꼭 알아야만 하는 템플릿. 이 책은 C++ 템플릿을 효과적으로 사용하는 데 필요한 모든 내용을 다루고 있다.
- 디트마르 퀼, Phaidros eaSE
템플릿이 C++에 포함된 지 벌써 십년이 지났지만(그리고 다양한 형태로 사용될 수 있지만) 템플릿은 여전히 잘못 이해되고, 오용되거나 논쟁거리가 되고 있다. 한편 템플릿은 더 깔끔하고 빠르며 똑똑한 소프트웨어를 만들기 위한 강력한 도구로 사용된다. 템플릿은 새로운 C++ 프로그래밍 패러다임의 주춧돌이 될 것이다.
그러나 여전히 많은 책과 글이 C++ 템플릿의 이론과 애플리케이션을 피상적으로만 설명하고 있다. 일부 책에서 다양한 템플릿 기반 기술을 설명하고는 있지만 이러한 기술들이 C++ 언어에 의해 지원받는 부분에 대해 정확히 설명하진 않는다. 결국, 초보자는 물론이거니와 고급 C++ 프로그래머조차도 자신들이 만든 코드가 왜 예상과 다르게 동작하는지 알아내려면 템플릿과 씨름해야 한다.
현실에서 벌어지는 이러한 난제를 해결하기 위해 저자들은 이 책을 쓰기로 결심했다. 하지만 두 저자는 문제를 각자 다른 접근 방식을 통해 독립적으로 해결하려 했다.
데이비드는 C++ 템플릿 언어 메커니즘에 대한 상세 내용과 템플릿을 사용했을 때 쓸 수 있는 주요 고급 프로그래밍 테크닉에 대한 완벽한 참고 자료를 제공하는 데 최선을 다했다. 그는 정확하고 완벽하길 바랐다. 니코는 프로그래머로서 일상적으로 템플릿을 쉽게 사용할 수 있는 책을 만드는 데 관심이 있었다. 다시 말해서 템플릿의 실용적인 측면을 다루면서도 직관적으로 이해할 수 있는 책을 쓰고 싶어 했다.
어떻게 보면 과학자와 공학자 간의 격차처럼 보이는 이 두 가지 방식을 이 책에서는 모두 활용하기로 결정했다. 그러나 어느 정도 겹치기는 하겠지만 저자마다 강조한 부분은 차이가 있을 것이다.
애디슨웨슬리 출판사가 두 저자들을 맺어줌으로써 결국 상세한 참고자료가 들어있는 C++ 템플릿 입문서라 할 만한 이 책이 탄생하게 됐다. 『똑똑한 프로그래밍을 위한 ++ 템플릿 가이드』는 템플릿 입문서이며, 필요한 언어 요소에 대한 소개뿐 아니라 실용적인 해법을 위한 설계 기법도 함께 설명한다. 또한 C++ 템플릿 문법과 의미 구조를 넘어 잘 알려지거나 덜 알려진 템플릿 사용 방식과 기술에 대한 요약서이기도 하다.
★ 이 책에서 다루는 내용 ★
■ 템플릿의 정확한 동작
■ 템플릿과 관련된 함정을 피하는 방법
■ 기본적인 관용구에서부터 이전에 문서화된 적 없는 기술 전반
■ 성능이나 안전성을 침해하지 않으면서도 소스코드를 재사용하는 방법
■ C++ 프로그램의 효율성을 증가시키는 방법
■ 좀 더 유연하고 유지보수가 쉬운 소프트웨어를 만드는 방법
★ 이 책의 구성 ★
템플릿의 개념을 익히거나 다시 살펴보고 싶은 C++ 프로그래머라면 1부 “템플릿 기본”을 주의 깊게 읽자. 아직 템플릿을 잘 모른다면 1부를 먼저 읽고 앞으로 사용할 용어와 방식에 익숙해지는 편이 좋다. 1부는 템플릿을 포함하는 소스코드를 만들 경우 필요한 내용도 살펴본다.
각자의 학습 방식에 따라 2부 “템플릿 상세 설명”에서 다루는 템플릿의 자세한 내용까지 다 익히고 싶을 수도 있고, 3부 “템플릿과 설계”에 나오는 실용적인 코딩 기술에 더 신경을 쓸 수도 있다(좀 더 미묘한 언어 주제에 대한 내용은 2부를 참조하자). 일상에서 접하는 문제를 해결하기 위해 이 책을 샀다면 3부 내용이 도움이 될 것이다. 4부 “고급 애플리케이션”은 3부와 얼핏 유사하지만 설계 기술보다는 특정 애플리케이션을 위해 템플릿이 어떻게 사용되는가를 더욱 강조했다. 따라서 4부에 들어가기 앞서 3부의 내용을 숙지하는 편이 좋다.
부록에는 유용한 정보들이 다수 포함되어 있으므로 본문에서도 자주 부록을 언급할 것이다. 부록 또한 따로 읽을 만한 가치가 있도록 주의를 기울였다.
★ 소스코드 ★
책에서 기술을 익히려면 예제를 통해 살펴보는 편이 가장 빠르다. 이 책은 많은 예제를 제시하고 있다. 추상적인 개념을 드러내기 위해 코드 몇 줄로 보여주는 예제도 있지만, 견고한 애플리케이션을 제공하기 위한 완벽한 프로그램으로 만들어진 예제도 있다. 후자의 예제들은 해당 프로그램 코드를 설명하는 C++ 주석도 같이 제공된다. 예제 파일은 이 책의 웹사이트인 http://www.josuttis.com/tmplbook/나 한국어판 도서정보 페이지 http://www.acornpub.co.kr/book/cplustemplate에서 내려받을 수 있다.
기본정보
ISBN | 9788960770676 ( 8960770671 ) | ||
---|---|---|---|
발행(출시)일자 | 2008년 12월 16일 | ||
쪽수 | 552쪽 | ||
크기 |
188 * 254
mm
|
||
총권수 | 1권 | ||
원서명/저자명 | C++ templates : the complete guide/Vandevoorde, David | ||
이 책의 개정정보 |
새로 출시된 개정판이 있습니다.
개정판보기
|
Klover
e교환권은 적립 일로부터 180일 동안 사용 가능합니다.
리워드는 작성 후 다음 날 제공되며, 발송 전 작성 시 발송 완료 후 익일 제공됩니다.
리워드는 리뷰 종류별로 구매한 아이디당 한 상품에 최초 1회 작성 건들에 대해서만 제공됩니다.
판매가 1,000원 미만 도서의 경우 리워드 지급 대상에서 제외됩니다.
일부 타인의 권리를 침해하거나 불편을 끼치는 것을 방지하기 위해 아래에 해당하는 Klover 리뷰는 별도의 통보 없이 삭제될 수 있습니다.
- 도서나 타인에 대해 근거 없이 비방을 하거나 타인의 명예를 훼손할 수 있는 리뷰
- 도서와 무관한 내용의 리뷰
- 인신공격이나 욕설, 비속어, 혐오발언이 개재된 리뷰
- 의성어나 의태어 등 내용의 의미가 없는 리뷰
리뷰는 1인이 중복으로 작성하실 수는 있지만, 평점계산은 가장 최근에 남긴 1건의 리뷰만 반영됩니다.
구매 후 리뷰 작성 시, e교환권 200원 적립
문장수집
e교환권은 적립 일로부터 180일 동안 사용 가능합니다. 리워드는 작성 후 다음 날 제공되며, 발송 전 작성 시 발송 완료 후 익일 제공됩니다.
리워드는 한 상품에 최초 1회만 제공됩니다.
주문취소/반품/절판/품절 시 리워드 대상에서 제외됩니다.
구매 후 리뷰 작성 시, e교환권 100원 적립