이미 소장하고 있다면 판매해 보세요.
|
1장. 모던 C++과 친숙해지기
__모던 C++의 새로운 기능 익히기 ____auto 키워드로 데이터 타입을 자동으로 정의하기 ____decltype 키워드로 표현식 타입 질의하기 ____null 포인터 ____비멤버 함수 begin()과 end() ____범위 기반 for 루프로 컬렉션 내 요소 순회 __C++ 표준 라이브러리 구현 살펴보기 ____컨테이너 안에 객체 배치하기 ____알고리즘 사용하기 __람다 표현식 ____간단한 함수를 람다로 표현하기 ____여러 줄의 함수를 람다로 표현하기 ____람다 표현식에서 값 반환 ____람다 표현식에서 값 캡처하기 ____초기화 캡처 ____제네릭 람다 표현식 __스마트 포인터로 메모리 관리 자동화하기 ____unique_ptr로 원시 포인터 대체하기 ____shared_ptr로 객체 공유하기 ____weak_ptr로 객체 추적하기 __튜플을 사용해 다양한 데이터 타입 저장하기 ____튜플에서 값 읽기 ____튜플 값 타입 반환 __요약 2장. 함수형 프로그래밍에서 함수 다루기 __일급 함수 ____다른 함수의 매개변수로 함수 전달 ____변수에 함수 대입 ____컨테이너에 함수 저장 ____런타임에 새로운 함수 생성 __고차 함수의 세 가지 기능 ____고차 함수의 특성, 맵 알아보기 ____고차 함수의 특성, 필터로 데이터 추출하기 ____고차 함수의 특성, 폴드 알아보기 __순수 함수로 부작용 피하기 __커링으로 함수 분리하기 __요약 3장. 함수에 불변 객체 사용하기 __불변 객체의 주요 특징 ____지역 변수 수정 ____함수에 전달된 인수 수정하기 __값 수정 금지하기 __불변 객체에 일급 함수와 순수 함수 적용하기 __불변 객체 구현하기 ____가변 객체 만들기 ____가변 객체를 불변 객체로 변환하기 __불변성의 장점 __요약 4장. 재귀 함수 호출 __함수를 재귀적으로 호출하기 ____반복으로 함수 호출 ____재귀로 함수 호출 __불변 함수 반복 호출 __꼬리 재귀 이해하기 __함수형, 절차형, 백트랙킹 재귀 ____함수형 재귀 ____절차형 재귀 ____백트랙킹 재귀 __요약 5장. 지연 평가로 실행 늦추기 __표현식 평가 ____즉시 평가 ____지연 평가 __지연 평가에 필요한 기술 ____처리 흐름 늦추기 ____메모이제이션으로 값 캐싱 ____메모이제이션으로 코드 최적화 __지연 평가 코드 만들기 ____Chunk, Row 클래스 디자인 ____여러 행 연결하기 ____각 행의 요소 순회하기 ____무한 정수 행 만들기 ____무한 소수 행 만들기 ____즉시 평가를 지연 평가로 변환하기 __요약 6장. 메타프로그래밍으로 코드 최적화 __메타프로그래밍 소개 ____매크로를 사용한 코드 전처리 ____표준 라이브러리의 템플릿 메타프로그래밍 자세히 보기 __템플릿 메타프로그래밍 ____템플릿 메타프로그래밍에서 타입 다루기 ____템플릿 메타프로그래밍에서 값 처리 ____템플릿 메타프로그래밍에서 조건 처리 ____템플릿 메타프로그래밍에서 재귀 처리 __컴파일 타임에 타입 선택하기 __템플릿 메타프로그래밍으로 흐름 제어 ____조건에 따라 다음 작업 결정 ____구문 선택 ____루프에 적용하기 __컴파일 타임에 코드 실행 ____컴파일 타임 상수 얻기 ____컴파일 타임에 클래스 생성 __메타프로그래밍의 장점과 단점 __요약 7장. 동시성을 이용한 병렬 실행 __C++의 동시성 ____싱글 스레드로 작업하기 ____멀티 스레드로 작업하기 __뮤텍스를 이용한 스레드 동기화 ____동기화 문제 해결하기 ____자동으로 잠금 해제하기 ____recursive_mutex로 데드락 방지하기 __윈도우에서 스레드 처리 이해하기 ____핸들로 작업하기 ____자동으로 핸들 해제하기 ____이벤트 트리거 ____스레드에서 이벤트 사용하기 __요약 8장. 함수형 방식으로 코드 작성하기 __명령형 클래스 준비(Step01) __명령형 클래스를 함수형 클래스로 변환(Steop02 ~ 06) ____매개변수에 함수 전달(Step02) ____기본 클래스 만들기(Step03) ____순수 함수를 가지도록 개선(Step04) ____람다 표현식으로 조건 필터링(Step05) ____Customer 클래스에 재귀와 메모이제이션 적용(Step06) __코드 디버깅 ____디버깅 도구 시작 ____디버깅 모드에서 사용 가능한 명령 ____중단점 설정과 제거 ____객체의 현재 상태 출력 __요약 |
Wisnu Anggoro
위스누 앤거로의 다른 상품
김현욱의 다른 상품
|
이 책에서 다루는 내용
명령형 접근법과 함수형 접근법의 차이 함수형 코드에서 일급 함수와 순수 함수 사용 예시 부작용 방지를 위한 불변 객체 제작법 효과적으로 재귀 알고리즘 설계하기 지연 평가로 더 빠른 코드 만들기 프로그램 응답성 향상을 위한 동시성 사용 코드 최적화를 위한 C++ 표준 라이브러리와 메타프로그래밍 사용법 익히기 이 책의 대상 독자 이 책은 함수형 패러다임을 적용해서 견고하고 테스트 가능한 프로그램을 개발하고 싶은 OOP에 친숙한 C++ 개발자를 대상으로 한다. 이 책의 구성 1장 ‘모던 C++과 친숙해지기’에서는 auto, decltype, null 포인터, 범위 기반(range-based) for 루프, 표준 라이브러리, 람다(Lamda) 표현식, 스마트 포인터, 튜플(tuple)처럼 모던 C++의 여러 기능을 두루 살펴보며 모던 C++과 친숙해진다. 2장 ‘함수형 프로그래밍에서 함수 다루기’에서는 일급 함수, 순수 함수, 커링(currying) 등 함수형 프로그래밍의 핵심 개념을 다룬다. 3장 ‘함수에 불변 객체 사용하기’에서는 가변(mutable) 객체를 불변(immutable) 객체로 바꾸는 방법을 알아본다. 불변 객체를 만들기 위해 일급 함수와 순수 함수를 적용해 본다. 4장 ‘재귀 함수 호출’에서는 반복(iteration)과 재귀(recursion)의 차이점을 짚어보고, 재귀가 함수형 프로그래밍에 더 좋은 이유를 알아본다. 재귀의 세 가지 종류인 함수형, 절차형(procedural), 백트랙킹(backtracking)에 대해서도 살펴본다. 5장 ‘지연 평가로 실행 늦추기’에서는 코드 실행을 지연해 더 효율적인 코드 제작법을 배운다. 캐싱과 메모이제이션(memoization)으로 실행 시간을 단축하는 방법도 알아본다. 6장 ‘메타프로그래밍으로 코드 최적화’에서는 메타프로그래밍을 사용해 컴파일 타임에 코드를 실행하는 방법을 배운다. 또 템플릿 메타프로그래밍으로 코드 흐름을 제어해본다. 7장 ‘동시성을 이용한 병렬 실행’에서는 멀티 스레드를 다룬다. 데드락(deadlock)을 방지하기 위한 동기화 기법을 알아보고, 특히 윈도우 OS에서 스레드를 생성하고 실행하는 방법을 배운다. 8장 ‘함수형 방식으로 코드 작성하기’에서는 지금까지 공부한 내용을 기반으로 함수형 코드로 프로그램을 만들어 본다. 그리고 개발 도중 예상하지 못한 결과가 나타나거나 크래시가 발생했을 때 해결 방안을 찾기 위한 디버깅 방법도 알아본다. 지은이의 말 함수형 프로그래밍(Functional Programming)은 프로그램 구조 스타일 중 하나로, 공유 상태(shared state), 가변 데이터(mutable data), 부작용(side-effects)을 배제하는 순수 함수(pure function)로 구성된다. 수학에서 다루는 함수와 유사한데, 출력 값은 인수에만 의존하므로 동일한 입력에는 항상 같은 결과를 반환한다. 함수형 프로그래밍의 근본 개념은 문제 해결 방법으로 기존 패러다임과 다르게 함수의 활용을 강조하는 것이다. 함수형 프로그래밍은 명령형(imperative)에 대비되는 선언형(declarative)이다. 이 말은 프로그래밍이 명령(statement) 대신, 표현식(expression)과 선언(declaration)으로 이루어진다는 뜻이다. 함수형 프로그래밍에서는 순수 함수를 사용하므로 프로그램의 상태가 예상과 다르게 변하는 현상, 이른바 부작용을 방지한다. 반면 명령형 프로그래밍에서 프로그램 상태는 보통 객체의 함수 간에 공유되며 빈번하게 변경된다. 한편 표현식이 평가되면 명령형 프로그래밍에서는 결과 값이 변수에 대입된다. 예를 들어 함수 내에 여러 개의 표현식이 있다면, 최종 결과 값은 마지막 변수 상태에 영향을 받는다. 상태는 끊임없이 변할 수 있으므로 실행 순서가 매우 중요하다. 반면 함수형 프로그래밍에서는 기존 변수의 값을 바꾸는 대입은 금지되며, 만약 대입이 필요하다면 기존 변수를 사용하지 말고 새로운 변수를 만들어야 한다. 무엇보다 함수형 코드는 명령형이나 OOP 코드에 비해 더 간결하고 예상 가능하며 테스트가 쉽다. 하스켈(Haskell)이나 스칼라(Scala)처럼 함수형 프로그래밍을 염두에 두고 설계된 언어도 있지만, C++ 역시 언어의 여러 기능을 활용해 함수형 코드 작성이 가능하다는 점을 이 책을 통해 배우게 될 것이다. 옮긴이의 말 C++은 대표적인 객체 지향 언어이므로 함수형 프로그래밍과의 조합이 다소 어색해 보이는 게 사실이다. 그렇지만 C++이 어떤 언어인가? C++은 못하는 게 없는 전지전능한(!) 언어이다. C++의 풍부한 기능을 활용하면 함수형 프로그래밍의 특징인 일급함수, 불변객체, 맵/필터/폴드 등도 큰 어려움 없이 구현할 수 있다. 이 책은 모던 C++을 비롯한 C++의 여러 기능을 사용해 함수형 프로그램을 개발하는 방법을 설명한다. 그리 길지 않은 예제 코드를 곁들여 설명하므로 따라가기 수월하며, 함수형 프로그래밍을 궁금해하는 C++ 개발자들이 흥미를 가질 내용이 가득하다. C++과 함수형 프로그래밍을 본격적으로 다룬 책은 이 책이 처음이 아닐까 생각한다. 몇 가지 약점이 있지만 가벼운 마음으로 따라가며 알고 있던 내용은 확실히 다지고, 몰랐던 개념이나 함수 사용법 등을 새로 익히다 보면 함수형 프로그래밍의 기본 개념을 잡는데 충분할 것이다. 파이썬, GO, 러스트까지 점점 설 자리가 줄어들어 외롭고, 비주얼 스튜디오 만큼 잦은 버전업으로 부담은 커져가는 C++ 개발자들이 이 책을 통해 잠시나마 괴로운 현실을 잊고 새로운 흥미를 느끼길 기대한다. |