모던 C++ 챌린지 (100가지 문제로 익히는 모던 C++의 다양한 기능)

모던 C++ 챌린지 (100가지 문제로 익히는 모던 C++의 다양한 기능)

$31.24
Description
C++는 업계와 학계를 비롯한 다양한 분야에서 지난 수십 년 동안 널리 사용되며 자리를 공고히 해왔다. 하지만 C++는 결코 배우기 쉬운 언어가 아니다. 한 가지 언어를 통달하는 데 가장 좋은 방법은 실무에서 다양한 프로그램을 작성하며 직접 그 언어의 특징을 활용해 보는 것이지만, 그런 기회를 찾기는 쉽지 않다. 이 책은 모던 C++에서 제공하는 다양한 기능과 표준 라이브러리, 더 나아가 서드 파티 크로스 플랫폼 라이브러리를 활용할 수 있도록 구성된 실전에서 볼 수 있을 법한 100가지 연습 문제를 담고 있다. 이 책이 모던 C++ 학습에 좋은 동반자가 될 것이다.
저자

마리우스반실라

15년동안산업과금융솔루션을개발해온소프트웨어엔지니어다.『모던C++프로그래밍쿡북』(에이콘,2019)을썼으며,주로마이크로소프트(Microsoft)의기술을바탕으로C++와C#을이용한데스크톱애플리케이션을개발하고있다.
자신의전문기술지식을다른사람들과공유해온열정을인정받아10년이넘는기간동안마이크로소프트MVP로활동하고있다.트위터계정@mariusbancila를통해그에게연락할수있다.

목차

1장.수학문제

1.3이나5로나누어떨어지는자연수의합을계산하는프로그램구현하기
2.최대공약수프로그램구현하기
3.최소공배수프로그램구현하기
4.주어진수보다작은가장큰소수를계산하는프로그램구현하기
5.섹시소수짝을출력하는프로그램구현하기
6.과잉수출력프로그램구현하기
7.친화수짝을출력하는프로그램구현하기
8.암스트롱수를출력하는프로그램구현하기
9.소인수분해프로그램구현하기
10.그레이코드출력프로그램구현하기
11.로마표기법변환프로그램구현하기
12.가장긴콜라츠수열출력프로그램구현하기
13.파이값계산프로그램구현하기
14.ISBN검증프로그램구현하기

2장.언어기능

15.IPv4데이터형식표현하는함수작성하기
16.범위안에있는IPv4주소열거하기
17.기본적인연산을지원하는2차원배열만들기
18.여러수를인자로받는최소함수작성하기
19.컨테이너에여러값삽입하기
20.조건별컨테이너안의원소확인하는함수작성하기
21.시스템핸들래퍼작성하기
22.온도단위리터럴을제공하는라이브러리작성하기

3장.문자열과정규표현식

23.바이너리데이터를문자열로변환하기
24.문자열을바이너리데이터로변환하기
25.문자열을제목형식으로바꾸기
26.구획문자로나누어진문자열합치기
27.구획문자리스트를바탕으로문자열을토큰으로분리하기
28.가장긴회문부분문자열출력하기
29.차량번호판검증하기
30.URL추출하기
31.날짜를문자열로변환하기

4장.스트림과파일시스템

32.파스칼의삼각형
33.프로세스를표로출력하기
34.텍스트파일에서빈줄제거하기
35.디렉토리크기계산하기
36.주어진날짜보다오래된파일삭제하기
37.디렉토리에서정규표현식과일치하는파일찾기
38.임시로그파일

5장.날짜와시간

39.함수실행시간측정하기
40.두날짜사이의날수를반환하기
41.주어진날짜의요일찾기
42.한해의몇번째날인지찾기
43.여러시간대에걸친회의시각출력하기
44.달력출력하기

6장.알고리즘과데이터구조

45.우선순위큐데이터구조구현하기
46.원형버퍼데이터구조구현하기
47.이중버퍼구현하기
48.범위안에서가장빈번하게등장하는원소와등장횟수를반환하기
49.텍스트히스토그램구하기
50.전화번호목록필터링하기
51.전화번호목록변형하기
52.문자열로만들수있는모든순열생성하기
53.영화평균평점계산하여출력하기
54.쌍알고리즘함수작성하기
55.결합알고리즘함수작성하기
56.선택알고리즘함수작성하기
57.정렬알고리즘함수작성하기
58.노드사이의최단경로계산하여출력하기
59.족제비프로그램구현하기
60.생명게임구현하기

7장.동시성

61.병렬변환알고리즘작성하기
62.스레드기반병렬최솟값,최댓값탐색알고리즘작성하기
63.비동기함수기반병렬최솟값,최댓값탐색알고리즘작성하기
64.병렬정렬알고리즘작성하기
65.스레드컴포넌트가안전하게콘솔에로그메시지를출력하는함수작성하기
66.고객서비스시스템구현하기

8장.디자인패턴

67.패스워드검증프로그램구현하기
68.임의의패스워드를생성하는프로그램구현하기
69.사회보장번호생성프로그램구현하기
70.승인시스템구현하기
71.관측가능한벡터컨테이너작성하기
72.할인가적용해최종가격계산하는프로그램구현하기

9장.데이터직렬화

73.XML직렬화및역직렬화하기
74.XPath를이용해XML데이터선택하기
75.데이터를JSON으로직렬화하기
76.JSON으로부터데이터역직렬화하기
77.영화목록을PDF로출력하기
78.이미지집합에서PDF생성하기

10장.압축,이미지,데이터베이스

79.ZIP아카이브파일안의파일찾기
80.ZIP아카이브압축하고해제하기
81.패스워드가있는ZIP아카이브압축하고해제하기
82.국기PNG파일만들기
83.텍스트검증PNG생성하기
84.EAN-13바코드생성기구현하기
85.SQLite데이터베이스에서영화정보읽어들이기
86.SQLite데이터베이스에영화정보삽입하기
87.SQLite데이터베이스에서영화이미지다루기

11장.암호화

88.카이사르암호법을적용한프로그램구현하기
89.비즈네르암호법을적용한프로그램구현하기
90.베이스64인코딩을적용한프로그램구현하기
91.사용자자격을증명하는인증프로그램구현하기
92.파일해시를계산하는프로그램구현하기
93.파일암호화및복호화프로그램구현하기
94.RSA암호화로파일서명및변조여부확인프로그램구현하기

12장.네트워킹과서비스

95.호스트의IP주소찾기
96.피즈-버즈게임을위한클라이언트-서버프로그램구현하기
97.비트코인환율표시프로그램구현하기
98.IMAP을이용해이메일가져오기
99.텍스트를임의의언어로번역하기
100.사진에서얼굴감지하기

출판사 서평

★이책에서다루는내용★
■JSON과XML데이터직렬화및역직렬화
■사용자간의안전한통신을위해메시지암호화하고서명
■SQLite데이터베이스를애플리케이션에내장하고사용
■스레드와비동기함수를이용해범용병렬알고리즘구현
■파일을ZIP파일로압축하고복원
■원형버퍼나우선순위큐같은데이터구조구현
■특정한문제를풀기위한알고리즘과함께범용알고리즘구현
■TCP/IP로통신하는클라이언트-서버애플리케이션개발
■HTTPREST서비스사용
■디자인패턴을이용해실전문제해결

★이책의대상독자★
C++를배우는중이거나연습을위한도전과제를찾고있다면이책은당신을위한것이다.다른언어에대한경험이있는지와관계없이,C++를배우는모두에게도움이될수있는실용적인연습문제와실전문제로구성됐다.언어나표준라이브러리의기능을설명하기보다(그런것들은책이나문서,튜토리얼비디오를통해배울수있다)다양한난이도의과제를수행하며다른자료에서배운기술들을활용할수있도록한다.사실이책의문제들은언어에구애받지않기때문에C++로된풀이에서직접적인도움을받기는어렵겠지만다른프로그래밍언어를배울때도사용할수있을것이다.

★이책의구성★
1장,‘수학문제’에서는다음장들에서다룰더어려운문제들에앞서몸을푸는과정으로,수학연습문제로구성돼있다.
2장,‘언어기능’에서는연산자오버로딩,이동의미론,사용자정의리터럴부터가변인자함수,폴드표현식,타입추론과같은템플릿메타프로그래밍측면까지언어가제공하는기능들을연습할수있는문제들을실었다.
3장,‘문자열과정규표현식’에서는문자열과다른데이터타입간의변환,문자열의분할과결합,정규표현식을이용한작업에이르기까지문자열을조작하는방법과관련된문제를풀어본다.
4장,‘스트림과파일시스템’에서는출력스트림조작을비롯해C++17의filesystem라이브러리로파일과디렉토리를다뤄본다.
5장,‘날짜와시간’에서는곧출시될C++20확장에포함된chrono라이브러리를미리체험해본다.또한새로추가된표준을바탕으로만들어진date라이브러리로풀이할수있는달력과타임존에관련된다양한문제를살펴본다.
6장,‘알고리즘과데이터구조’에서는기존에알려진표준알고리즘을활용해풀수있는다양한문제를포함해,원형버퍼나우선순위큐를이용해자신만의범용알고리즘을구현해야하는문제도알아본다.이장은진화알고리즘과셀룰러오토마타를배울수있는두가지흥미로운문제인도킨스의족제비프로그램과콘웨이의라이프게임프로그램을구현해보는것으로마무리한다.
7장,‘동시성’에서는스레드와비동기함수를사용해범용적인병렬알고리즘을구현하는문제와함께동시성과관련된몇가지실전문제를풀어본다.
8장,‘디자인패턴’에서는데코레이터,컴포지트,책임연쇄,템플릿메소드등디자인패턴으로해결할수있는일련의문제를알아본다.
9장,‘데이터직렬화’에서는몇가지문제를통해일반적으로가장많이사용되는직렬화포맷인JSON과XML을다룬다.또한서드파티오픈소스크로스플랫폼라이브러리를사용해PDF파일만들기에도전해본다.
10장,‘압축,이미지,데이터베이스’에서는zip압축파일과관련된문제를해결하고,캡차(Captcha)방식의시스템이나바코드생성기와같은실전문제를위해PNG파일을만들어본다.또한애플리케이션에SQLite데이터베이스를내장하고활용해본다.
11장,‘암호화’에서는주로데이터암호화와사이닝을위해Crypto++라이브러리를사용하는방법을배운다.또한자신만의Base64인코딩및디코딩유틸리티를구현해본다.
12장,‘네트워킹과서비스’에서는TCP/IP를통해통신하는자신만의클라이언트-서버(Client-server)애플리케이션을구현해본다.또한비트코인환율조회나문자번역API와같은다양한REST서비스를사용해볼것이다.

★옮긴이의말★
C++의최초구현체가등장한지35년이라는시간이지났고,한때이언어에대한부정적인전망이가득하던시절도있었다.그러나C++는오늘날까지여전히세계에서가장널리사용되는프로그래밍언어순위표의윗자리를공고히지키고있다.C++에는다른언어들에없는강점이있기때문이다.
C++의강점은분명하다.무엇보다도성능이다.개발자는고수준의추상화를유지하면서도타깃하드웨어에최적화된저수준의코드를이용해고성능프로그램을제작할수있다.오늘날대부분의플랫폼에서네이티브컴파일러를지원하므로이러한강점이극대화된다.이장점은인공지능과머신러닝에대해관심이높아진오늘날에들어더욱빛을발한다.머신러닝프레임워크들대부분내부적으로C++를기반으로작성돼있으며,특히연구영역을벗어나실제상용화되는제품을제작하는과정에서는직접C++를사용하는것이외의선택지를생각할수없을때가많다.
또한C++는진보적이다.멀티패러다임을표방하는언어답게다른어떤언어보다도빠르게새로운개념과문법들을표준으로받아들이고있다.이를통해높은런타임성능을유지하면서도훨씬짧고간결하며직관적인코드를작성할수있게됐다.
하지만C++는결코배우기쉬운언어가아니다.때로는위에서언급한장점들이오히려진입장벽으로작용하기도한다.메모리관리와같은기능들을직접다뤄야하기때문에프로그램을안전하게동작하도록만들려면주의해야할점이많다.언어의고유한특징으로인해프로그램을설계할때다른언어를이용할때와는다른접근법이필요할때도있다.이러한상황에대한해법들이실제로는어느정도패턴으로정형화돼있기는하지만초보자나중급자입장에서이를잘이해하고직접활용하기는어려운일이다.표준에새롭게추가된기능들을완전히활용하기위해서때로는코드를이전과는완전히다른개념을바탕으로작성해야할필요도있는데,이는사실C++에익숙한사용자라도결코쉬운일이아니다.
지은이의말에서도언급했듯이,프로그래밍언어를익히는가장좋은방법은실전에서직접언어의기능을활용해프로그램을작성해보며,좋은코드를많이읽는것이다.하지만이를혼자연습하는일은생각보다쉽지않다.적당한주제를고르기도어려울뿐더러,주제를고르더라도주제에맞춰가이드가될만한좋은코드를찾는것이어렵기때문이다.이책은이러한상황에처한이들에게좋은참고서다.실무에서겪을법한다양한주제의연습문제와함께모던C++의새로운기능들을활용한풀이를담고있다.
이책은언어기능자체를학습하기위한튜토리얼을제공하지는않는다.아마이책만으로모던C++를익히기에는충분하지않을텐데,문제에서주어지는내용들이구체적이지않아때로는불친절하게느껴질수도있다.하지만이책의목적은분명하다.바로실무에가까운경험을통해스스로문제를정의하고,사고의틀을넓혀문제를능숙하게해결할수있는능력을기를수있도록돕는것이다.이책은그런면에서정말좋은책이라할수있다.
풀이를참조하기전에꼭문제에대해고민할시간을가질수있기를바란다.혼자서생각하는것도좋고,인터넷검색이나다른책을참조하는것도좋다.나름대로풀이를작성하고,책에서제시하는풀이를참고해자신의코드를더욱개선할수있다.
조금더고민한다면책에서제시하는것보다더나은방법을찾아볼여지도얼마든지있다.이책을읽으며고민할만한거리를많이얻을수있기를바란다.결국여러분을전문가로만드는것은이러한고민들의시간이기때문이다.