아름다운 C++ : 클린하고 안전하며 빠른 코드 작성을 위한 핵심 가이드라인 30선

아름다운 C++ : 클린하고 안전하며 빠른 코드 작성을 위한 핵심 가이드라인 30선

$33.93
Description
선별된 30개 핵심 가이드라인에서 피어나는 모던 C++의 아름다움
C++는 역사가 오래되었고, 긴 시간에 걸쳐 언어 자체는 물론 그 작성법도 진화했다. 비야네 스트롭스트룹(C++ 창시자)과 허브 서터가 작성한, C++ 코딩 스타일 가이드의 바이블이라고 할 수 있는 오픈 소스 ‘C++ 핵심 가이드라인(C++ Core Guidelines)’ 역시 지금 이 순간에도 끝없이 개정되고 있다.
백과사전처럼 구성된 핵심 가이드라인 전체를 차례대로 정독하는 것은 지루한 일이다. 이 책은 256개에 달하는 핵심 가이드라인 중에서도 정수 30개를 선별해 다섯 개 카테고리로 묶고, 맥락과 함께 가이드라인의 내용을 해설한다. 경험 많은 게임 프로그래머 가이 데이비슨과 C++ 강연으로 유명한 케이트 그레고리가 실제 사례와 실무 지식을 덧붙여 공식 C++ 핵심 가이드라인 웹사이트와 긴밀하게 연계되도록 집필했다.
전문적인 샘플 코드를 통해, 긴 역사만큼이나 오용되는 지식을 바로잡고 추상화, 템플릿, 타입 안전성 등 주요 프로그래밍 개념에 대한 통찰력을 얻을 수 있다. 레거시 코드나 지침을 무조건 배척하는 대신, 개념의 원래 의미와 역사적 맥락을 돌아보고 예시를 살펴본다. 새로운 언어 기능과 오래된 언어 기능 모두를 성공적으로 사용하는 검증된 방법을 조명함으로써, 기본적으로(by default) 강력하고 성능이 뛰어난 프로그램을 작성하는 방법을 보여준다. ‘핵심 가이드라인의 핵심’을 유려하게 풀어내는 아름다운 책이다.

주요 내용
● ‘바이크셰딩’ 방지하기(사소한 것 때문에 중요한 문제를 놓치지 말자)
● 나중에 문제를 일으킬 수 있는 코드를 작성하지 않기
● 피해야 할 레거시 기능과 대신 사용할 최신 기능을 파악하기
● 최신 기능을 올바르게 사용하여 새로운 문제를 일으키지 않고 이점을 누리기
● 정적으로 타입 안전하며, 누출이 없고, 발전시키기 쉬운 고품질 코드를 기본값으로 삼기
● 모든 C++ 버전(C++11, C++14, C++17, C++20)에서 핵심 가이드라인 사용하기

저자

가이데이비드슨,케이트그레고리

저자:가이데이비드슨
크리에이티브어셈블리의엔지니어링실무장으로,〈토탈워〉프랜차이즈개발,카탈로그큐레이션,엔지니어링팀의프로그래밍표준개선작업을담당하고있다.ISOC++위원회에서활동하고,#include〈C++〉디스코드서버를운영하며,C++행사에서연설한다.Prospela,BAMEinGames등C++멘토링활동도하고있다.

저자:케이트그레고리
40년이상의경력을보유한개발자로,5개대륙에서기조연설을했으며,업계를더욱포용적이고따뜻하게만드는#include〈C++〉를비롯한여러C++활동에서자원봉사를하고있다.1986년부터그레고리컨설팅을운영하며전세계고객들이더효율적으로일할수있도록돕고있다.

역자:박지윤
주중엔코드를짜고주말엔미디를찍는삶을지향하는개발자이자번역가.VST와DAW개발에관심이있어C/C++를기웃대는프런트엔드개발자로살고있다.서울대학교재학중미술대학연합전공영상매체예술(미디어아트)을복수전공한것을계기로웹과전자음악에관심을갖게되었다.언젠가는웹공간에원하는비주얼과사운드를펼쳐놓을수있기를꿈꾸지만,예술가가되기보다는예술가가사용하는도구를만드는데관심이더많다.현재넥슨코리아에재직중이며,역서로는《전문가를위한C》(한빛미디어,2022)가있다.

목차

옮긴이머리말xii
베타리더후기xiii
선정가이드라인목록xvi
추천서문(비야네스트롭스트룹)xvii
시작하며xix
감사의글xxiv

PART1사소한것때문에중요한문제를놓치지말자
CHAPTER1.1[P.2]ISO표준C++로작성하라3
__1.1.1ISO표준C++란무엇인가?3
__1.1.2차이를캡슐화하기5
__1.1.3예전방식학습하기9
__1.1.4표준개발현황파악하기11
CHAPTER1.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요약22
CHAPTER1.3[C.45]데이터멤버를초기화하기만하는기본생성자를정의하지말고기본멤버초기화자로초깃값을설정하라24
__1.3.1어쨌거나기본생성자가있는이유는?24
__1.3.2데이터멤버를초기화하려면?26
__1.3.3두사람이클래스하나를유지보수하면무슨일이발생하나요?28
__1.3.4요약31
CHAPTER1.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요약42
CHAPTER1.5[ES.10]선언당단하나의이름만선언하라43
__1.5.1소개합니다43
__1.5.2하위호환성47
__1.5.3더명확하게선언하기48
__1.5.4구조적바인딩49
__1.5.5요약51
CHAPTER1.6[NR.2]함수에단일반환문을고집하지말라52
__1.6.1규칙은진화합니다52
__1.6.2정리를보장하기54
__1.6.3RAII사용하기57
__1.6.4좋은함수작성하기59
__1.6.5요약61

PART2자기발등을찍지말라
CHAPTER2.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요약75
CHAPTER2.2[I.23]함수의인수를적게유지하라76
__2.2.1얼마나벌어야할까요?76
__2.2.2추상화를통해문제를단순화하기78
__2.2.3가능한한적게하되,덜하지는말기81
__2.2.4실제사례83
__2.2.5요약85
CHAPTER2.3[I.26]크로스컴파일러ABI가필요하면C방식의하위집합을사용하라86
__2.3.1라이브러리만들기86
__2.3.2ABI란무엇인가?87
__2.3.3최소한으로줄이기89
__2.3.4예외전파91
__2.3.5요약92
CHAPTER2.4[C.47]멤버를선언한순서대로데이터멤버를정의하고초기화하라94
__2.4.1요약103
CHAPTER2.5[CP.3]쓰기가능한데이터의명시적공유는최소화하라104
__2.5.1전통적실행모델104
__2.5.2잠깐,더있습니다106
__2.5.3교착상태및데이터경쟁피하기109
__2.5.4잠금과뮤텍스외의사항111
__2.5.5요약114
CHAPTER2.6[T.120]꼭필요할때만템플릿메타프로그래밍을사용하라115
__2.6.1std::enable_if에서requires로123
__2.6.2요약128

PART3그만사용하라
CHAPTER3.1[I.11]절대로원시포인터(T*)나참조(T&)로소유권을넘기지말라131
__3.1.1자유공간사용하기131
__3.1.2스마트포인터의성능비용134
__3.1.3데코레이터없는참조시맨틱사용하기135
__3.1.4gsl::owner136
__3.1.5요약139
CHAPTER3.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요약149
CHAPTER3.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요약161
CHAPTER3.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두종류의const169
__3.4.7const의놀라운점171
__3.4.8요약172
CHAPTER3.5[E.28]전역상태에따른에러처리는피하라(예:errno)173
__3.5.1에러처리는어렵습니다173
__3.5.2C와errno173
__3.5.3반환코드175
__3.5.4예외176
__3.5.5177
__3.5.6Boost.Outcome177
__3.5.7에러처리는왜이렇게어려운가?179
__3.5.8고생끝에낙이온다180
__3.5.9요약182
CHAPTER3.6[SF.7]헤더파일의전역범위에usingnamespace를사용하지말라183
__3.6.1이렇게하지말라183
__3.6.2명확하게하기184
__3.6.3using사용법185
__3.6.4심벌은어디로가나?187
__3.6.5한층더은밀히퍼지는문제190
__3.6.6복잡한범위지정연산자문제해결하기191
__3.6.7유혹과타락193
__3.6.8요약194

PART4새로운기능을제대로사용하라
CHAPTER4.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요약209
CHAPTER4.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추신219
CHAPTER4.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요약232
CHAPTER4.4[Con.5]컴파일타임에계산할수있는값은constexpr를사용하라233
__4.4.1const부터constexpr에이르기까지233
__4.4.2C++기본값235
__4.4.3constexpr사용하기237
__4.4.4inline241
__4.4.5consteval242
__4.4.6constinit243
__4.4.7요약245
CHAPTER4.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요약256
CHAPTER4.6[T.10]모든템플릿인수의콘셉트를명시하라257
__4.6.1어떻게여기까지왔을까요?257
__4.6.2매개변수제한하기260
__4.6.3콘셉트를추상화하는법263
__4.6.3콘셉트를통해분해하기266
__4.6.5요약268

PART5기본적으로코드를잘작성하라
CHAPTER5.1[P.4]프로그램은최대한정적으로타입에안전해야한다273
__5.1.1타입안전성은C++의보안기능입니다273
__5.1.2공용체275
__5.1.3형변환277
__5.1.4unsigned280
__5.1.5버퍼와크기283
__5.1.6요약285
CHAPTER5.2[P.10]가변데이터보다는불변데이터를택하라286
__5.2.1잘못된기본값286
__5.2.2함수선언의상수성289
__5.2.3요약293
CHAPTER5.3[I.30]규칙위반을캡슐화하라294
__5.3.1일상에서보기싫은것숨기기294
__5.3.2체면차리기296
__5.3.3요약301
CHAPTER5.4[ES.22]값으로초기화하기전까지는변수를선언하지말라303
__5.4.1표현식과문의중요성303
__5.4.2C언어방식의선언304
__5.4.3선언후초기화하기305
__5.4.4최대한지연된선언307
__5.4.5맥락에따른기능의지역화309
__5.4.6상태제거하기311
__5.4.7요약313
CHAPTER5.5[Per.7]최적화할수있도록설계하라314
__5.5.1프레임레이트최대화하기314
__5.5.2하드웨어수준에서더나아가작업하기316
__5.5.3추상화를통한최적화320
__5.5.4요약322
CHAPTER5.6[E.6]메모리누수를방지하려면RAII를사용하라

출판사 서평

클린하고안전하며빠른코드작성을위한핵심가이드라인30선

C++는역사가오래되었고,긴시간에걸쳐언어자체는물론그작성법도진화했다.비야네스트롭스트룹(C++창시자)과허브서터가작성한,C++코딩스타일가이드의바이블이라고할수있는오픈소스‘C++핵심가이드라인(C++CoreGuidelines)’역시지금이순간에도끝없이개정되고있다.
백과사전처럼구성된핵심가이드라인전체를차례대로정독하는것은지루한일이다.이책은256개에달하는핵심가이드라인중에서도정수30개를선별해다섯개카테고리로묶고,맥락과함께가이드라인의내용을해설한다.경험많은게임프로그래머가이데이비슨과C++강연으로유명한케이트그레고리가실제사례와실무지식을덧붙여공식C++핵심가이드라인웹사이트와긴밀하게연계되도록집필했다.
전문적인샘플코드를통해,긴역사만큼이나오용되는지식을바로잡고추상화,템플릿,타입안전성등주요프로그래밍개념에대한통찰력을얻을수있다.레거시코드나지침을무조건배척하는대신,개념의원래의미와역사적맥락을돌아보고예시를살펴본다.새로운언어기능과오래된언어기능모두를성공적으로사용하는검증된방법을조명함으로써,기본적으로(bydefault)강력하고성능이뛰어난프로그램을작성하는방법을보여준다.‘핵심가이드라인의핵심’을유려하게풀어내는아름다운책이다.

주요내용
‘바이크셰딩’방지하기(사소한것때문에중요한문제를놓치지말자)
나중에문제를일으킬수있는코드를작성하지않기
피해야할레거시기능과대신사용할최신기능을파악하기
최신기능을올바르게사용하여새로운문제를일으키지않고이점을누리기
정적으로타입안전하며,누출이없고,발전시키기쉬운고품질코드를기본값으로삼기
모든C++버전(C++11,C++14,C++17,C++20)에서핵심가이드라인사용하기

선별된30개핵심가이드라인에서피어나는모던C++의아름다움

C++코딩스타일을개선하는데유용한30가지핵심가이드라인을선정해상세한실무지식과함께설명한다.공식C++핵심가이드라인웹사이트와긴밀하게연계되도록구성했고,개념적통찰력과전문적인샘플코드를제공한다.사례와함께맥락속에서새로운언어기능과오래된언어기능모두를성공적으로사용하는검증된방법을조명함으로써,기본적으로더강력하고성능이뛰어난프로그램을작성하는방법을보여준다.