C++ 함수형 프로그래밍 (C++와 함수형 프로그래밍 패러다임의 만남)

C++ 함수형 프로그래밍 (C++와 함수형 프로그래밍 패러다임의 만남)

$32.78
Description
C++를 다룰 줄 알지만 아직 함수형 프로그래밍에 대한 개념이 생소하거나, 본인의 C++ 코드에 함수형 프로그래밍을 적용하고 싶은 개발자를 위한 책이다. 함수형 프로그래밍의 개념부터, 이를 기본으로 하는 파셜 애플리케이션이나 커링과 같은 여러 가지 연산자들의 개념과 활용법을 소개한다. 또한 함수형 프로그래밍에서 매우 중요한 불변성에 대해서도 다룬다.
저자

알렉산드루볼보아카

AlexandruBolboaca
20년동안소프트웨어개발업계에서주니어프로그래머에서테크니컬리더와소프트웨어아키텍트를거쳐테크니컬코치와트레이너가됐다.작업방식과테스트접근법과코드개선에경험이풍부하다.『UsableSoftwareDesign』(2016)과『Coderetreat』(2016)를썼다.

목차

1부.C++의함수형빌딩블록

1장.함수형프로그래밍소개
__기술적요구사항
__함수형프로그래밍소개
__도처에존재하는함수형프로그래밍의구조
__구조화된루프와함수형루프비교
__불변성
__OOP와함수형디자인스타일비교
__모듈확장성과중복제거
__요약
__질문

2장.순수함수이해하기
__기술적요구사항
__순수함수란?
__C++에서의순수함수
____인자가없는순수함수
____하나이상의인자를지닌순수함수
__순수함수와불변성
____불변성과참조에의한전달
____불변성과포인터
____불변성과비클래스함수
____불변성과출력파라미터
____정적함수가과연정답일까?
____정적함수의대안
__순수함수와I/O
__요약
__질문

3장.람다파헤치기
__기술적요구사항
__람다란무엇인가?
__C++에서의람다
____변수캡처
____값에의한변수캡처와참조에의한변수캡처
____다수값캡처
____포인터값캡처
__어떠한캡처를사용해야할까?
____람다와순수함수
____람다불변성과값에의한인자전달
____람다불변성과참조에의한인자전달
____람다불변성과포인터인자
____람다와I/O
____람다불변성과값캡처
______참조에의해캡처한값의불변성
______값에의해캡처한포인터의불변성
______참조에의해캡처한포인터의불변성
__람다와클래스
____데이터멤버를람다로활용하기
____정적변수를람다로활용하기
____정적함수를람다로변환하기
____람다와커플링
__요약
__질문

4장.함수형합성아이디어
__기술적요구사항
__함수형합성이란?
____함수형합성
____C++에서의함수형합성구현
____교환법칙이성립하지않는함수형합성
__복합적함수합성
____합성함수심층구현
____다수의인자를가진함수분해
______곱의결과값증가시키기
______증가시킨후곱하기
______함수의합성과분해에대한회고
__함수형합성을활용한중복제거
____incrementResultOfMultiplication일반화
____multiplyIncrementedValues일반화
__요약
__질문

5장.파셜애플리케이션과커링
__기술적요구사항
__파셜애플리케이션과커링
____파셜애플리케이션
____C++에서의파셜애플리케이션
____클래스메서드에서의파셜애플리케이션
____커링
______커링이란?
______커링과파셜애플리케이션
______다수의인자를가진함수의커링
__파셜애플리케이션과커링을활용한중복제거
__요약
__질문

2부.함수로설계하기

6장.함수형으로사고하기-데이터입력부터데이터출력까지
__기술적요구사항
__입력데이터가함수에들어와출력데이터로나가기까지
____명령형스타일vs함수형스타일동작예제
____틱택토결과
____입력과출력
____출력데이터
____입력데이터
____데이터변환
____filledWithX를위한all_of활용
____map/transform사용하기
____transform단순화하기
____좌표
____보드에서줄구하기및좌표구하기
____보드에서줄구하기
____범위
____열구하기
____대각선구하기
____모든줄,열,대각선구하기
____any_of를활용한X승리확인하기
____reduce/accumulate를활용한보드표시하기
____find_if를활용한승리상세내역표시하기
____솔루션완성하기
____○승리확인하기
____none_of를활용한무승부확인하기
____게임진행중확인하기
____옵셔널타입을활용한에러관리
__요약

7장.함수형연산자를활용한중복제거
__기술적요구사항
__함수형연산자를활용한중복제거
____DRY원칙
____중복과유사성
____파셜애플리케이션을활용한파라미터유사성정리하기
____다른함수의출력으로함수를호출하는유사성을함수형합성으로대체하기
____고차원함수를활용한구조적유사성제거하기
____고차원함수를활용해숨은루프제거하기
__요약

8장.클래스를활용해응집도향상시키기
__기술적요구사항
__클래스를활용해응집도향상시키기
____함수형관점에서의클래스
__OOP와함수형동치
____고응집성원칙
____응집함수를클래스로묶기
____클래스를순수함수로쪼개기
__요약

9장.함수형프로그래밍의테스트주도개발
__기술적요구사항
__함수형프로그래밍에서의TDD
____순수함수를위한유닛테스트
____TDD주기
__예시-TDD를활용해순수함수설계하기
____포커패문제
______요구사항
______1단계-생각하기
______예제
______첫번째테스트
______첫번째테스트통과하기
______리팩터링
______다시한번생각하기
______더많은테스트
______두번째테스트
______테스트통과하기
______리팩터링
______생각하기
______다음테스트-단순스트레이트플러시
______테스트통과하기
______더진행하기
______isStraightFlush구현하기
______스트레이트플러시확인을comparePokerHands와연결하기
______두스트레이트플러시비교하기
______생각하기
______두스트레이트플러시비교하기(계속)
__요약

3부.함수형프로그래밍의장점활용하기

10장.퍼포먼스최적화
__기술적요구사항
__퍼포먼스최적화
____퍼포먼스전달과정
______측정치와측정법을포함한퍼포먼스의명확한목표정의하기
______퍼포먼스용몇가지코딩가이드라인정의하기와코드의특정부분에
______가이드라인을명확히유지하고재단하기
______코드가동작하도록만들기
______필요한곳을측정해퍼포먼스향상시키기
______모니터링및개선
__병렬론-불변성의장점활용하기
__메모이제이션
____메모이제이션구현하기
____메모이제이션활용하기
__꼬리재귀최적화
____완전최적화한호출
____If와삼항연산자비교
____이중재귀
__비동기코드를통한실행시간최적화하기
____퓨처
____함수형비동기코드
____리액티브프로그래밍맛보기
__메모리사용최적화하기
____단순루프메모리측정하기
____인플레이스transform의메모리측정하기
____무브반복자를활용한transform
____솔루션비교하기
____불변형데이터구조
__요약

11장.특성기반테스트
__기술적요구사항
__특성기반테스트
____예제기반테스트와특성기반테스트비교
__생성기
__테스트에특성넣기
____00이정의되지않음이되는특성
____0[1.maxInt]이0이되는특성
____[1.maxInt]0이1이되는특성
____[0.maxInt]의어떤값에1제곱을하면그값이나오는특성
____특성:xy=xy-1*x
____결론
__예제로부터데이터주도테스트와특성까지
__좋은특성,나쁜특성
____구현에관한몇가지조언
__요약

12장.순수함수로리팩터링하기와순수함수를통한리팩터링하
__기술적요구사항
__순수함수로리팩터링하기와순수함수를통한
__리팩터링하기
____리팩터링이란?
____레거시코드의딜레마
____종속성과변경
____순수함수와프로그램의구조
____컴파일러와순수함수를활용한종속성식별
____레거시코드를람다로변환하기
____람다리팩터링하기
____람다에서클래스로변환하기
____리팩터링메서드요점
__디자인패턴
____함수형스타일전략패턴
____함수형스타일명령패턴
____함수로의존성주입
__순수함수형디자인패턴
____상태유지하기
____밝혀지는진실
____Maybe
____그렇다면모나드는무엇인가?
__요약

13장.불변성과아키텍처-이벤트소싱
__기술적요구사항
__불변성과아키텍처-이벤트소싱
__아키텍처에불변성적용하기
____이벤트소싱의장점
____이벤트소싱의단점과함정
______이벤트스키마변경
______과거데이터삭제
__구현예제
____데이터를어떻게가져올것인가?
____참조무결성은어떻게해결하는가?
__요약

4부.C++의함수형프로그래밍의현재와미래

14장.범위라이브러리를활용한게으른평가
__기술적요구사항
__범위라이브러리개괄
__게으른평가
__범위라이브러리를활용한게으른평가
__액션으로변형가능한변경
__무한수열과데이터생성
____문자열생성하기
__요약

15장.STL의현재와미래
__기술적요구사항
__functional헤더
__algorithm헤더
____컬렉션의각객체에서특성하나꺼내오기
____조건계산하기
____표시나연속이가능한포맷으로변환하기
__numeric헤더-accumulate
____쇼핑카트에세금이포함된총가격계산하기
____리스트를JSON으로변환하기
__algorithm으로돌아가기-find_if와copy_if
__optional과variant
__C++20과범위라이브러리
__요약

16장.표준언어의현재와미래
__기술적요구사항
__표준언어의현재와미래
____순수함수
____람다
____파셜애플리케이션과커링
____함수형합성

출판사 서평

◈이책에서다루는내용◈

◆함수형프로그래밍의기초
◆함수형프로그래밍의빌딩블록의이해를통한코드구조화
◆함수형프로그래밍과객체지향프로그래밍(OOP)간의설계방식차이
◆C++에서새로운함수를생성하는커링의개념활용법
◆함수형방식으로디자인패턴을구현하는기술
◆함수형프로그래밍을활용한멀티스레딩개념
◆함수형구조활용시메모리소모개선법

◈이책의대상독자◈

이미C++(언어문법,STL컨테이너,템플릿원소를포함한)을다뤄봤으나도구상자에도구를더많이추가하고싶은프로그래머를위한책이다.모든아이디어를명확하고실용적인방식으로섬세하게설명하고있어함수형프로그래밍을전혀모르는사람이읽어도이해할수있다.


◈이책의구성◈

1장,‘함수형프로그래밍소개’에서는함수형프로그래밍의기본적인아이디어를소개한다.
2장,‘순수함수이해하기’에서는함수형프로그래밍의기본적인빌딩블록과불변성에중점을둔함수와C++에서그것을작성하는방법을가르쳐준다.
3장,‘람다에깊이뛰어들기’에서는람다와C++에서람다를작성하는방법에초점을맞춘다.
4장,‘함수합성아이디어’에서는고차원연산자로함수를합성하는방법을살펴본다.
5장,‘파셜애플리케이션과커링’에서는2가지함수의기본연산자인파셜애플리케이션과커링을C++에서활용하는방법을가르쳐준다.
6장,‘함수로사고하기-데이터입력에서데이터출력까지’에서는함수중심설계를적용해코드를구성하는다른방식을알려준다.
7장,‘함수형연산자로중복제거하기’에서는반복금지(DRY)원칙을전체적으로살펴본다.중복코드의종류와코드유사성을살펴보고합성,파셜애플리케이션,커링같은함수형연산자를활용해코드를더DRY하게작성하는방법을소개한다.
8장,‘클래스를활용한코드응집도개선하기’에서는함수를클래스로진화시키는방법과클래스를함수로변환하는방법을보여준다.
9장,‘함수형프로그래밍의테스트주도개발’에서는함수형프로그래밍으로테스트주도개발(TDD)을하는방법과불변성과순수함수로테스트를간결화하는방법을살펴본다.
10장,‘퍼포먼스최적화’에서는메모이제이션,꼬리재귀최적화,병렬수행을포함한함수중심설계퍼포먼스를최적화하는특정방법을심도있게살펴본다.
11장,‘특성기반테스트’에서는함수형프로그래밍이신규패러다임인테스트작성을자동화하는방법을살펴본다.이테스트는데이터생성으로예제기반테스트를강화한다.
12장,‘순수함수로리팩터링하기와순수함수를통한리팩터링하기’에서는최소한의위험을감수하면서기존코드를순수함수로리팩터링한후클래스로다시되돌리는방법을설명한다.몇가지함수형디자인패턴과클래식디자인패턴도살펴볼것이다.
13장,‘불변성과아키텍처-이벤트소싱’에서는불변성이데이터저장소수준으로옮길수있다는것을설명한다.이벤트소싱을활용하는방법을살펴보고장점과단점을논의한다.
14장,‘범위라이브러리를활용한게으른평가’에서는경이로운범위라이브러리를깊이살펴보고C++17과C++20에서이를활용하는방법을보여준다.
15장,‘STL의현재와미래’에서는C++17표준에있는STL의함수형관련기능을살펴보고C++20에추가된몇가지흥미로운기능을살펴본다.
16장,‘표준의현재와미래’에서는함수형프로그래밍의기초적인빌딩블록과C++17표준에서이것을활용하기위한다양한옵션을개략적으로살펴보면서이책을마무리한다

◈옮긴이의말◈

C++는과거에가장인기있는언어중하나였습니다.하지만하드웨어의비약적인성능향상에따라상대적으로퍼포먼스에대한중요도가낮아지고프로그래머의생산성중요도가커지면서시장에서많은관심을잃은상황입니다.그러나여전히C++는강력한성능을자랑하고진화하고있습니다.컴퓨터언어패러다임들이발전하면서C++도서서히최근언어들이지향하는가치들을흡수하기시작했습니다.
람다는C++11에서처음등장했고C++17에서는map이등장하여C++로도제법손쉽게함수형프로그래밍을즐길수있게됐습니다.함수형프로그래밍은병렬처리에아주특화돼있습니다.멀티코어CPU가아닌CPU를찾아볼수가없고앞서이야기한것처럼C++는아주빠르게동작하는바이너리를생성해내기좋습니다.설레지않으신가요?C++와함수형프로그래밍이만나면무슨일이벌어질까요?
이책은함수형프로그래밍에대해설명하고이와관련된큼직한주제들을모두다룹니다.이책한권이면C++로함수형프로그래밍을전개하는데충분할것이라생각합니다.역자로서독자분들이이책을읽고함수형프로그래밍의강력함을느끼고현업에서도유용하게적용할수있길희망합니다.