이 상품은 구매 후 지원 기기에서 예스24 eBook앱 설치 후 바로 이용 가능한 상품입니다.
|
옮긴이 머리말 xii베타리더 후기 xiii선정 가이드라인 목록 xvi추천 서문(비야네 스트롭스트룹) xvii시작하며 xix감사의 글 xxivPART 1 사소한 것 때문에 중요한 문제를 놓치지 말자CHAPTER 1.1 [P.2] ISO 표준 C++로 작성하라 3__1.1.1 ISO 표준 C++란 무엇인가? 3__1.1.2 차이를 캡슐화하기 5__1.1.3 예전 방식 학습하기 9__1.1.4 표준 개발 현황 파악하기 11CHAPTER 1.2 [F.51] 선택의 여지가 있다면 오버로딩 대신 기본 인수를 사용하라 13__1.2.1 소개 13__1.2.2 추상화 다듬기: 추가 인수냐, 오버로딩이냐 14__1.2.3 오버로드 확인의 미묘한 차이 16__1.2.4 예제로 돌아가기 18__1.2.5 모호하지 않다는 기본 인수의 특성 19__1.2.6 오버로드의 대안 21__1.2.7 반드시 오버로드해야 하는 경우 21__1.2.8 요약 22CHAPTER 1.3 [C.45] 데이터 멤버를 초기화하기만 하는 기본 생성자를 정의하지 말고 기본 멤버 초기화자로 초깃값을 설정하라 24__1.3.1 어쨌거나 기본 생성자가 있는 이유는? 24__1.3.2 데이터 멤버를 초기화하려면? 26__1.3.3 두 사람이 클래스 하나를 유지보수하면 무슨 일이 발생하나요? 28__1.3.4 요약 31CHAPTER 1.4 [C.131] 자명한 getter와 setter는 피하라 32__1.4.1 아주 오래된 이디엄 32__1.4.2 추상화 33__1.4.3 단순한 캡슐화 36__1.4.4 클래스 불변 조건 39__1.4.5 명사와 동사 41__1.4.6 요약 42CHAPTER 1.5 [ES.10] 선언당 단 하나의 이름만 선언하라 43__1.5.1 소개합니다 43__1.5.2 하위 호환성 47__1.5.3 더 명확하게 선언하기 48__1.5.4 구조적 바인딩 49__1.5.5 요약 51CHAPTER 1.6 [NR.2] 함수에 단일 반환문을 고집하지 말라 52__1.6.1 규칙은 진화합니다 52__1.6.2 정리를 보장하기 54__1.6.3 RAII 사용하기 57__1.6.4 좋은 함수 작성하기 59__1.6.5 요약 61PART 2 자기 발등을 찍지 말라CHAPTER 2.1 [P.11] 지저분한 구조체는 코드에 펼쳐놓지 말고 캡슐화하라 65__2.1.1 한 번에 처리하기 65__2.1.2 지저분한 구조체를 캡슐화한다는 의미 67__2.1.3 언어의 목적과 추상화의 본질 69__2.1.4 추상화 수준 72__2.1.5 리팩터링과 구분 짓기를 통한 추상화 74__2.1.6 요약 75CHAPTER 2.2 [I.23] 함수의 인수를 적게 유지하라 76__2.2.1 얼마나 벌어야 할까요? 76__2.2.2 추상화를 통해 문제를 단순화하기 78__2.2.3 가능한 한 적게 하되, 덜 하지는 말기 81__2.2.4 실제 사례 83__2.2.5 요약 85CHAPTER 2.3 [I.26] 크로스 컴파일러 ABI가 필요하면 C 방식의 하위 집합을 사용하라 86__2.3.1 라이브러리 만들기 86__2.3.2 ABI란 무엇인가? 87__2.3.3 최소한으로 줄이기 89__2.3.4 예외 전파 91__2.3.5 요약 92CHAPTER 2.4 [C.47] 멤버를 선언한 순서대로 데이터 멤버를 정의하고 초기화하라 94__2.4.1 요약 103CHAPTER 2.5 [CP.3] 쓰기 가능한 데이터의 명시적 공유는 최소화하라 104__2.5.1 전통적 실행 모델 104__2.5.2 잠깐, 더 있습니다 106__2.5.3 교착 상태 및 데이터 경쟁 피하기 109__2.5.4 잠금과 뮤텍스 외의 사항 111__2.5.5 요약 114CHAPTER 2.6 [T.120] 꼭 필요할 때만 템플릿 메타프로그래밍을 사용하라 115__2.6.1 std::enable_if에서 requires로 123__2.6.2 요약 128PART 3 그만 사용하라CHAPTER 3.1 [I.11] 절대로 원시 포인터(T*)나 참조(T&)로 소유권을 넘기지 말라 131__3.1.1 자유 공간 사용하기 131__3.1.2 스마트 포인터의 성능 비용 134__3.1.3 데코레이터 없는 참조 시맨틱 사용하기 135__3.1.4 gsl::owner 136__3.1.5 요약 139CHAPTER 3.2 [I.3] 싱글턴을 피하라 140__3.2.1 전역 객체는 나쁩니다 140__3.2.2 싱글턴 디자인 패턴 141__3.2.3 정적 초기화 순서 실패 142__3.2.4 싱글턴 숨기는 법 144__3.2.5 하지만 이 중 하나만 존재해야 합니다 145__3.2.6 잠깐만요... 147__3.2.7 요약 149CHAPTER 3.3 [C.90] memset과 memcpy에 의존하지 말고 생성자와 할당 연산자를 사용하라 150__3.3.1 최대 성능 추구하기 150__3.3.2 끔찍한 생성자 오버헤드 151__3.3.3 가장 간단한 클래스 152__3.3.4 어쨌든 표준에서 설명하는 내용은 무엇인가요? 155__3.3.5 그러면 memcpy는 어때요? 158__3.3.6 컴파일러를 절대 과소평가하지 말라 159__3.3.7 요약 161CHAPTER 3.4 [ES.50] const를 형 변환하지 말라 162__3.4.1 이야기 162__3.4.2 훨씬 더 많은 데이터 다루기 163__3.4.3 상수 방화벽 165__3.4.4 이중 인터페이스 구현 166__3.4.5 캐싱과 느긋한 계산법 168__3.4.6 두 종류의 const 169__3.4.7 const의 놀라운 점 171__3.4.8 요약 172CHAPTER 3.5 [E.28] 전역 상태에 따른 에러 처리는 피하라(예: errno) 173__3.5.1 에러 처리는 어렵습니다 173__3.5.2 C와 errno 173__3.5.3 반환 코드 175__3.5.4 예외 176__3.5.5 〈system_error〉 177__3.5.6 Boost.Outcome 177__3.5.7 에러 처리는 왜 이렇게 어려운가? 179__3.5.8 고생 끝에 낙이 온다 180__3.5.9 요약 182CHAPTER 3.6 [SF.7] 헤더 파일의 전역 범위에 using namespace를 사용하지 말라 183__3.6.1 이렇게 하지 말라 183__3.6.2 명확하게 하기 184__3.6.3 using 사용법 185__3.6.4 심벌은 어디로 가나? 187__3.6.5 한층 더 은밀히 퍼지는 문제 190__3.6.6 복잡한 범위 지정 연산자 문제 해결하기 191__3.6.7 유혹과 타락 193__3.6.8 요약 194PART 4 새로운 기능을 제대로 사용하라CHAPTER 4.1 [F.21] ‘출력값’을 여러 개로 반환하려면 구조체로 반환하라 197__4.1.1 함수 시그니처의 형태 197__4.1.2 설명과 애너테이션 198__4.1.3 이제 객체를 반환할 수 있습니다 199__4.1.4 튜플도 반환할 수 있습니다 203__4.1.5 비상수 참조로 전달 및 반환하기 205__4.1.6 요약 209CHAPTER 4.2 [Enum.3] 단순 열거형보다는 클래스 열거형을 택하라 210__4.2.1 상수 210__4.2.2 범위가 있는 열거형 213__4.2.3 숨겨진 타입 215__4.2.4 암묵적 형 변환 217__4.2.5 요약 219__4.2.6 추신 219CHAPTER 4.3 [ES.5] 범위는 작게 유지하라 220__4.3.1 범위의 본질 220__4.3.2 블록 범위 222__4.3.3 네임스페이스 범위 223__4.3.4 클래스 범위 226__4.3.5 함수 매개변수 범위 228__4.3.6 열거형 범위 229__4.3.7 템플릿 매개변수 범위 230__4.3.8 맥락으로서의 범위 231__4.3.9 요약 232CHAPTER 4.4 [Con.5] 컴파일 타임에 계산할 수 있는 값은 constexpr를 사용하라 233__4.4.1 const부터 constexpr에 이르기까지 233__4.4.2 C++ 기본값 235__4.4.3 constexpr 사용하기 237__4.4.4 inline 241__4.4.5 consteval 242__4.4.6 constinit 243__4.4.7 요약 245CHAPTER 4.5 [T.1] 템플릿을 사용하여 코드의 추상화 수준을 높이라 246__4.5.1 이야기 246__4.5.2 추상화 수준 높이기 248__4.5.3 함수 템플릿과 추상화 250__4.5.4 클래스 템플릿과 추상화 253__4.5.5 작명은 어렵습니다 255__4.5.6 요약 256CHAPTER 4.6 [T.10] 모든 템플릿 인수의 콘셉트를 명시하라 257__4.6.1 어떻게 여기까지 왔을까요? 257__4.6.2 매개변수 제한하기 260__4.6.3 콘셉트를 추상화하는 법 263__4.6.3 콘셉트를 통해 분해하기 266__4.6.5 요약 268PART 5 기본적으로 코드를 잘 작성하라CHAPTER 5.1 [P.4] 프로그램은 최대한 정적으로 타입에 안전해야 한다 273__5.1.1 타입 안전성은 C++의 보안 기능입니다 273__5.1.2 공용체 275__5.1.3 형 변환 277__5.1.4 unsigned 280__5.1.5 버퍼와 크기 283__5.1.6 요약 285CHAPTER 5.2 [P.10] 가변 데이터보다는 불변 데이터를 택하라 286__5.2.1 잘못된 기본값 286__5.2.2 함수 선언의 상수성 289__5.2.3 요약 293CHAPTER 5.3 [I.30] 규칙 위반을 캡슐화하라 294__5.3.1 일상에서 보기 싫은 것 숨기기 294__5.3.2 체면 차리기 296__5.3.3 요약 301CHAPTER 5.4 [ES.22] 값으로 초기화하기 전까지는 변수를 선언하지 말라 303__5.4.1 표현식과 문의 중요성 303__5.4.2 C 언어 방식의 선언 304__5.4.3 선언 후 초기화하기 305__5.4.4 최대한 지연된 선언 307__5.4.5 맥락에 따른 기능의 지역화 309__5.4.6 상태 제거하기 311__5.4.7 요약 313CHAPTER 5.5 [Per.7] 최적화할 수 있도록 설계하라 314__5.5.1 프레임 레이트 최대화하기 314__5.5.2 하드웨어 수준에서 더 나아가 작업하기 316__5.5.3 추상화를 통한 최적화 320__5.5.4 요약 322CHAPTER 5.6 [E.6] 메모리 누수를 방지하려면 RAII를 사용하라 324__5.6.1 결정론적 소멸 324__5.6.2 파일 누수 없애기 327__5.6.3 왜 굳이 이렇게 할까요? 330__5.6.4 미래의 가능성까지 고려해야 하는가 332__5.6.5 어디에서 얻을 수 있나요? 335마치며 338후기(허브 서터) 340찾아보기 342
|
J. Guy Davidson
Kate Gregory
박지윤의 다른 상품
|
클린하고 안전하며 빠른 코드 작성을 위한 핵심 가이드라인 30선 C++는 역사가 오래되었고, 긴 시간에 걸쳐 언어 자체는 물론 그 작성법도 진화했다. 비야네 스트롭스트룹(C++ 창시자)과 허브 서터가 작성한, C++ 코딩 스타일 가이드의 바이블이라고 할 수 있는 오픈 소스 ‘C++ 핵심 가이드라인(C++ Core Guidelines)’ 역시 지금 이 순간에도 끝없이 개정되고 있다. 백과사전처럼 구성된 핵심 가이드라인 전체를 차례대로 정독하는 것은 지루한 일이다. 이 책은 256개에 달하는 핵심 가이드라인 중에서도 정수 30개를 선별해 다섯 개 카테고리로 묶고, 맥락과 함께 가이드라인의 내용을 해설한다. 경험 많은 게임 프로그래머 가이 데이비슨과 C++ 강연으로 유명한 케이트 그레고리가 실제 사례와 실무 지식을 덧붙여 공식 C++ 핵심 가이드라인 웹사이트와 긴밀하게 연계되도록 집필했다. 전문적인 샘플 코드를 통해, 긴 역사만큼이나 오용되는 지식을 바로잡고 추상화, 템플릿, 타입 안전성 등 주요 프로그래밍 개념에 대한 통찰력을 얻을 수 있다. 레거시 코드나 지침을 무조건 배척하는 대신, 개념의 원래 의미와 역사적 맥락을 돌아보고 예시를 살펴본다. 새로운 언어 기능과 오래된 언어 기능 모두를 성공적으로 사용하는 검증된 방법을 조명함으로써, 기본적으로(by default) 강력하고 성능이 뛰어난 프로그램을 작성하는 방법을 보여준다. ‘핵심 가이드라인의 핵심’을 유려하게 풀어내는 아름다운 책이다. 주요 내용● ‘바이크셰딩’ 방지하기(사소한 것 때문에 중요한 문제를 놓치지 말자)● 나중에 문제를 일으킬 수 있는 코드를 작성하지 않기● 피해야 할 레거시 기능과 대신 사용할 최신 기능을 파악하기● 최신 기능을 올바르게 사용하여 새로운 문제를 일으키지 않고 이점을 누리기● 정적으로 타입 안전하며, 누출이 없고, 발전시키기 쉬운 고품질 코드를 기본값으로 삼기● 모든 C++ 버전(C++11, C++14, C++17, C++20)에서 핵심 가이드라인 사용하기
|