이미지 검색을 사용해 보세요
검색창 이전화면 이전화면
최근 검색어
인기 검색어

소득공제
Modern C++ Design(모던 C++ 디자인)
제네릭 프로그래밍과 디자인 패턴을 적용한
안드레 알렉산드레스쿠 저 / 이기형 역 / 곽용재 감수
인포북 2003.07.30.
가격
20,000
10 18,000
YES포인트?
1,000원 (5%)
5만원 이상 구매 시 2천원 추가 적립
결제혜택
카드/간편결제 혜택을 확인하세요

이미 소장하고 있다면 판매해 보세요.

  •  해외배송 가능?
  •  문화비소득공제 가능

책소개

목차

용어 대역표

Part 1 테크닉

Chapter 1 단위전략 기반의 클래스 디자인
1.1 소프트웨어 디자인의 다양성
1.2 Do-It-All 인터페이스의 문제점
1.3 다중 상속이 해결책이 될 수 있을까요?
1.4 템플릿의 이점
1.5 단위전략과 단위전략 클래스
1.6 단위전략 인터페이스의 보강
1.7 단위전략 클래스의 소멸자
1.8 불완전한 구체화를 통한 부가기능
1.9 단위전략 클래스 간의 조합
1.10 단위전략 클래스를 통한 커스터마이징
1.11 호환/비호환 단위전략
1.12 클래스를 단위전략으로 분리해 내기
1.13 요약

Chapter 2 테크닉
2.1 컴파일 타임 어써션
2.2 템플릿의 부분 특화
2.3 로컬 클래스
2.4 상수 값에서 자료형으로의 변환
2.5 자료형에서 다른 자료형으로의 매핑
2.6 자료형의 선택
2.7 형변환과 상속 가능의 여부를 컴파일 타임에 알아내는 방법
2.8 type_info에 대한 포장 클래스
2.9 NullType과 EmptyType
2.10 Traits 자료형
2.11 요약

Chapter 3 Typelists
3.1 Typelist의 필요성
3.2 Typelist의 정의
3.3 Typelist 생성의 선형화
3.4 길이의 계산
3.5 중간 첨언
3.6 Index에 의한 접근
3.7 Typelist에 대한 탐색
3.8 Typelist에 자료형 또는 Typelist 추가하기
3.9 Typelist에서 특정 자료형을 제거하기
3.10 중복 자료형의 삭제
3.11 Typelist의 한 원소를 다른 자료형으로 바꾸기
3.12 부분적으로 정렬된 Typelist
3.13 Typelist를 통한 클래스 생성
3.14 요약
3.15 Typelist Quick Facts

Chapter 4 작은 객체에 대한 메모리 할당
4.1 C++가 제공하는 기본 할당기
4.2 메모리 할당기가 하는 작업
4.3 작은 객체에 대한 메모리 할당기
4.4 Chunk
4.5 FixedAllocator
4.6 SmallObjAllocator 클래스
4.7 컴파일러의 해트 트릭
4.8 간단하게, 또 복잡하게, 그러나 결국에는 간단하게...
4.9 활용 방안
4.10 요약
4.11 작은 객체에 대한 할당기 Quick Facts

Part 2 컴포넌트

Chapter 5 일반화 함수자
5.1 Command 디자인 패턴
5.2 실질 세계의 Command
5.3 C++의 호출 가능 객체들
5.4 Functor 클래스 템플릿의 뼈대
5.5 전달 함수 Functor::operator()의 구현
5.6 함수자 다루기
5.7 하나를 구성하고, 다른 하나는 공짜로 얻어내기
5.8 인자와 반환 값의 형변환
5.9 멤버 함수에 대한 포인터 다루기
5.10 바인딩
5.11 요청 작업의 체인화
5.12 실제 적용 시의 문제 1: 전달 함수가 갖는 부하
5.13 실제 적용 시의 문제 2: Heap 영역에서의 할당
5.14 Functor를 통한 Undo와 Redo의 구현
5.15 요약
5.16 Functor Quick Facts

Chapter 6 싱글톤의 구현
6.1 Static 데이터 + Static 함수 ! = 싱글톤
6.2 싱글톤의 지원을 위한 기본적인 C++ 기법
6.3 Singleton 객체의 유일성 보장
6.4 Singleton의 파괴
6.5 참조 무효화 현상
6.6 참조 무효화 현상에 대한 해법 (1): Phoenix 싱글톤
6.7 참조 무효화 현상에 대한 해법 (2): 수명 제어 Singleton
6.8 수명 제어 Singleton의 구현
6.9 다중 스레드의 세계 속에서...
6.10 통합
6.11 SingletonHolder로 작업하기
6.12 요약
6.13 SingletonHodler 클래스 템플릿 Quick Facts

Chapter 7 스마트 포인터
7.1 스마트 포인터 첫걸음
7.2 대가
7.3 스마트 포인터의 저장 구조
7.4 스마트 포인터 멤버 함수
7.5 소유권 관리 전략
7.6 주소 추출 연산자
7.7 원시 포인터 자료형으로의 암묵적 형변환
7.8 동치 조건과 부등 조건
7.9 대소 비교
7.10 오류 검사 및 보고
7.11 상수 객체에 대한 스마트 포인터와 상수 스마트 포인터
7.12 배열
7.13 스마트 포인터와 다중 스레딩
7.14 통합 정리
7.15 요약
7.16. 스마트 포인터 Quick Facts

Chapter 8 객체 팩토리
8.1 객체 팩토리의 필요성
8.2 C++에서의 객체 팩토리: 클래스와 객체
8.3 객체 팩토리의 구현
8.4 타입 식별자
8.5 일반화
8.6 참고 사항
8.7 복제 팩토리
8.8 객체 팩토리와 다른 제네릭 컴포넌트와의 활용
8.9 요약
8.10 Factory 클래스 템플릿 Quick Facts
8.11 CloneFactory 클래스 템플릿 Quick Facts

Chapter 9 추상 팩토리
9.1 추상 팩토리의 구조적 역할
9.2 제네릭한 스타일의 추상 팩토리 인터페이스
9.3 AbstractFactory의 구현
9.4 프로토타입에 기반한 추상 팩토리의 구현
9.5 요약
9.6 AbstractFactor 및 ConcreteFactory에 대한 Quick Facts

Chapter 10 비지터
10.1 비지터의 기초
10.2 오버로딩과 깔때기 함수
10.3 구현 코드의 정련: 비순환 비지터
10.4. 비지터의 일반화된 구현
10.5 순환 비지터에 대한 재고찰
10.6 변형 버전에 대한 지원
10.7 요약
10.8 비지터 제네릭 컴포넌트 Quick Facts

Chapter 11 멀티 메소드
11.1 멀티 메소드란 무엇일까요?
11.2 멀티 메소드가 필요한 경우는 언제일까요?
11.3 이중 자료형 스위치: Brute Force
11.4 자동화된 Brute-Force 접근법
11.5 Brute-Force 디스패치 엔진과의 대칭성
11.6 로그 시간의 이중 디스패치 엔진
11.7 FnDispatcher와 대칭성
11.8 함수자에 대한 이중 디스패치 엔진
11.9 인자의 형변환: static_cast인가, dynamic_cast인가?
11.10 상수 시간에 동작하는 멀티 메소드: 오직 속도
11.11 단위전략으로서의 BasicDispatcher와 BasicFastDispatcher
11.12 앞으로의 전망
11.13 요약
11.14 이중 디스패치 엔진 Quick Facts

부록 최소의 다중 스레드 라이브러리
A.1 다중 스레딩 평론
A.2 Loki의 접근법
A.3 정수 자료형에 대한 단위 연산
A.4 뮤텍스
A.5 객체지향 프로그래밍에서의 동기화
A.6 선택적인 volatile 한정자
A.7 세마포어, 이벤트 그리고 기타 등등
A.8 요약

참고 목록
찾아보기

저자 소개

저자 : Andrei Alexandrescu
Andrei Alexandrescu는 RealNetworks 사의 개발 매니저이다. 그는 C/C++ User Journal의 컬럼니스트이자, C++ Report의 컬럼니스트이며, 그의 혁신적인 성과는 그에게 이 분야에서의 선구자라는 명성을 가져다주었다. Andrei의 기술적 관심사는 프로그래밍 언어와 소프트웨어 재활용, 그리고 데이터 압축에 관한 것이다.

관련 분류

품목정보

발행일
2003년 07월 30일
쪽수, 무게, 크기
500쪽 | 912g | 크기확인중
ISBN13
9788980545179

추천평

이 책은 세 가지의 서로 다른 기술적 요소를 이야기하고 있습니다. 첫 번째로, C++에 있어서 템플릿의 능력과 유연성에 대한 새로운 통찰력을 제공해 줍니다(만일, Typelist의 내용이 여러분의 후두부에 강한 충격을 주지 못한다면, 자신의 감각이 마비된 것은 아닌지 의심해 보는 것이 좋을 것입니다). 두 번째로, 각 기법이나 패턴 구현 코드들이 제공하는 서로 다른 기능들에 대한 독립적 요소들을 확인시켜 줍니다. 이것은 템플릿 디자이너 혹은 패턴의 구현자들에게 있어서 매우 중요한 정보가 됩니다. 하지만 여러분은 다른 어떤 곳에서도 해당 기법과 패턴에 대한 이와 같은 방식의 분석을 찾아보기 힘들 것입니다. 세 번째로, Loki(이 책에서 설명하고 있는 템플릿 라이브러리)는 자유롭게 다운로드받을 수 있으며, 그것을 통해 그가 여기서 논의한 각 기법이나 패턴에 적용되는 템플릿 구현 코드들을 마음대로 연구할 수 있을 것입니다. 여러분의 컴파일러가 제공하는 템플릿 지원 기능에 대한 성능 평가 자료를 제공하는 것과는 별도로, 이 소스 코드는 여러분 자신의 디자인에 있어서 값을 매길 수 없는 소중한 시발점이 되어 줄 것입니다. 물론, 지금 바로 Andrei의 코드를 사용하는 것은 매우 바람직하고, 그리고 완전히 합법적인 일입니다. 제가 아는 바에 따르면, 그는 여러분 자신이 이룬 성과를 통해 많은 혜택을 누릴 수 있기를 바라고 있습니다.

제가 말할 수 있는 바에 따르면, 템플릿의 영역은 제가 저술을 포기했던 1995년 당시와 마찬가지로 매우 빠르게 변화하고 있습니다. 이것은 지속적으로 발전하고 있는 개념이며, 저는 여전히 이 템플릿에 대한 내용은 절대로 저술하지 않으려 합니다. 하지만 다행스럽게도, 몇몇 사람들이 저보다 더 용감한 생각을 가지고 있습니다. 그리고 Andrei는 그러한 선구자들 중 한 명입니다. 저는 여러분이 저와 마찬가지로 이 책을 통해 많은 것을 얻을 수 있을 것이라 확신합니다. - Scott Meyers

Andrei의 제네릭한 스타일의 컴포넌트는 C++가 마치 디자인을 명세하기 위한 언어처럼 느껴지게 만들 만큼 언어의 추상화 수준을 한 단계 격상시켜 주었습니다. 하지만, 디자인을 위한 언어와는 달리, 여러분은 C++의 모든 표현 구문과 그것이 주는 친숙한 문법도 그대로 누리실 수 있습니다. Andrei는 각 디자인 개념들(싱글톤, 비지터, 프록시, 추상 팩토리 등)을 수단으로 하여 프로그래밍 하는 방법을 잘 예시해 주고 있습니다. 게다가 여러분은 아무런 실행 시간의 오버헤드도 없이, 단지 템플릿 인자를 이용하여 구현 코드들의 트레이드 오프를 조율해 낼 수 있습니다. 그리고 여러분은 새로운 개발 도구를 만나 당황해 하거나, 마치 암호처럼 느껴지는 방법론적 문서들을 추가적으로 배워야 할 필요가 없습니다. 여러분에게 필요한 것은 오직 신뢰성 있는 최신의 C++ 컴파일러와 그리고 이 책뿐입니다.

코드 생성기들은 여러 해 동안 수동으로 작성된 코드에 손색없는 코드를 만들어 내리라는 약속을 해 왔습니다. 하지만, 저의 연구 결과와 실전에서의 경험에 의하면, 저는 결국 코드의 자동 생성이란 것이 수동 코드에 비견될 만한 코드를 만들어 낼 수는 없다는 확신을 가지게 되었습니다. 여러분은 코드 생성기를 통해 다양한 문제들을 접할 수 있습니다. 중복 코드의 문제, 코드 자동 생성기를 이용할 만한 가치가 없는 경우의 문제, 유연성이 부족한 생성기의 문제, 도저히 분석할 수 없는 생성 코드의 문제 등이 있을 수 있으며, 또한 자동 생성 코드와 자신의 코드를 집합시킬 수 없다는 것도 중요한 걸림돌이 됩니다. 이 중 어떤 문제라도 중요한 문제로 부각될 가능성이 있습니다. 게다가 이 문제들이 함께 조합되어 나타나게 될 경우, 대부분의 프로그래밍 과제에 있어서 코드 자동 생성기를 이용한다는 것은 바람직하지 못한 해법이 될 수도 있습니다.

만일 우리가 이러한 결점들을 피해서 코드 자동 생성의 이론적 이점 - 빠르고 쉬운 개발, 잉여 코드의 감소, 더 적은 오류 - 을 실현할 수 있다면 얼마나 멋진 일이 될 수 있을까요? 이것이 바로 Andrei의 접근법이 약속해 주는 내용입니다. 제네릭 컴포넌트는 사용하기 쉽고, 서로 조합하여 혼용이 가능한 템플릿을 이용하여 훌륭한 디자인을 구현해 냅니다. 이들은 코드 생성기들이 하는 일과 유사한 일을 해낼 수 있습니다. 즉 컴파일러가 소화해야 마땅한 판박이 코드들을 생성해 줍니다. 그러나 그들의 차이점을 말하자면, 제네릭 컴포넌트는 C++와 별개의 수단을 통하지 않고, 바로 C++ 자체를 통하여 그러한 코드를 생성해 준다는 것입니다. 이러한 결과는 애플리케이션 코드를 멋지게 집대성시켜 줄 수 있습니다. 여러분은 또한 이를 확장하거나, 오버라이드하거나, 아니면 자신의 요구에 맞도록 디자인을 변경시키기 위하여 언어 자체의 모든 기능을 이용할 수 있는 것입니다.

여기에 소개된 몇몇 테크닉들, 특히 3장의 템플릿 메타프로그래밍(역자주 : 이 코드들은 실제 바이너리 코드를 생성하지 않고, 다른 코드를 기계적으로 생성해 내는 논리적 구조를 형성하게 되므로 이러한 명칭을 사용하였다)은 너무나 교묘해서 충분히 이해하는 데 약간의 노력이 필요할 수도 있습니다. 하지만, 일단 이것을 완전히 익히고 나면, 여러분은 제네릭 컴포넌트라는 건물의 그야말로 견고한 기초를 가지게 될 것입니다. 사실, 저는 3장의 메타프로그래밍에 대한 내용만으로도 이 책 한 권의 값은 톡톡히 하고도 남는다고 주장하고 싶습니다. 그리고 새로운 통찰력을 소개하는 내용으로 가득 찬 10개의 장이 더 마련되어 있습니다. "10"이라는 숫자는 꽤나 커다란 숫자입니다. 하지만, 여러분의 작은 투자로 얻게 되는 내용은 그 숫자가 표현하는 것보다 훨씬 더 큰 가치가 있으리라 확신합니다. - John Vlissides
서문
이 책의 주제에 맞게 간결함과 빈틈 없는 C++ 도서 ★★★★★
이 책의 진보적인 템플릿 개념에 대해서는 정말 놀라울 정도이다. 그리고 이 책의 간결함과 빈틈없는 설명 또한 놀라울 정도이다. 여러분들은 작가의 의도를 알기 위해 이 책을 4~5번 정도는 읽어야 하지만, 모든 것이 이 책 안에 있다. 이 책은 진보적인 C++ 프로그래머들이 꼭 읽어야 할 책이다. 왜냐하면, 여러분은 템플릿의 파워에 새로운 시각을 얻게 될 것이다. 정말 놀라운 책이다~!

C++ 프로그래머에게 정말로 추천해 주고 싶다!! ★★★★★
이 책은 C++에서 라이브러리 개발에 관한 새로운 기준을 성립시켰다 해도 과언이 아니다. Modern C++은 제네릭 프로그래밍(generic programming)이나 디자인 패턴(design pattern), 그리고 real world와 같은 이론적인 요소로부터의 빈 공간을 채우고 있다. 이 책은 Design Patterns에 관해서 다소 어렵게 다루고 있지만, 이전의 design pattern에 관한 것들이 도움이 된다고 할지라도, 여러분들은 GoF의 책을 처음에 볼 필요가 없다. 이 책을 시스템 또는 라이브러리 디자이너가 되기를 원하는 모든 C++ 프로그래머에게 추천하고 싶다.

더 이상 C++ 템플릿에 논하지 말자!! ★★★★★
여러분들이 Windows, Unix, Linux 또는 RTOS 중 어떤 것을 쓰던지 간에, C/C++ 개발자들에게 이 책을 강력히 추천한다. 제목은 비록 모던 C++ 디자인이라고 지어졌지만, 실제적으로는 소프트웨어 디자인의 중요성을 강조하고 있고, 어떻게 design pattern이 소프트웨어 프로젝트의 질에 영향을 미치는지를 설명하고, 증명하고 있다.

꼭 읽어야 하는 C++ 도서~! ★★★★★
모든 C++ 프로그래머들은 이 놀라운 책을 꼭 보아야 한다. 나는 이 책이 generic programming과 내가 어떤 곳에서도 찾을 수 없었던 테크닉들에 관해서 여러분들이 더욱 이해하기 쉽게 도와줄 것이기 때문에 이 책을 강력히 추천한다. 이 책은 정말 별 다섯 개를 받을 가치가 충분히 있다.

템플릿은 오직 컨테이너만을 위한 것인가? ★★★★★
이 책은 템플릿에 관한 나의 관점을 바꿔주었다. 나는 오직 컨테이너만을 위해서 써야 한다고 생각했었다. 이 책은 여러분들이 템플릿을 이용해서 소프트웨어를 제작할 수 있는 진보적인 템플릿 테크닉에 대해서 설명해준다. 여러분들이 템플릿을 사용하지 않아도, 이것은 C++ 컴플라이어가 세상을 바라보는 방법을 이해할 수 있게 도와주기 때문에 이 책을 꼭 읽어야 하는 책이라고 추천하고 싶다.

C++ 프로그래머에게 꼭 필요한 책~!★★★★★
Alxanderescu의 책은 C++에 도전하기 위해서는 필수적인 책입니다.
이 책은 대부분 템플릿에 관해서 소개하고 있습니다. 대부분의 modern C++은 템플릿과 관계있다는 주장에 의해서 이 타이틀은 정당화될 수 있습니다. 이런 식으로, 이 책은 Scott Meyers의 STL에 관한 책을 추종하는 훌륭한 책입니다. Stan Lippman이 말했듯이, 이 책은 Visual C++ 아키텍쳐 팀이 좀더 나은 템플릿을 지지하기 위해, 그리고 Loki, Boost와 같이 이 책을 사용해서 작업한 라이브러리를 보증하는 최고의 책 중 하나이다.
아마존 서평

리뷰/한줄평4

리뷰

7.0 리뷰 총점

한줄평

첫번째 한줄평을 남겨주세요.