확장메뉴
주요메뉴


닫기
사이즈 비교
소득공제
미리보기 사이즈비교 공유하기

Functional Programming in C++

: C++를 사용해 함수형 프로그래밍 원리 마스터하기

프로그래밍 언어 시리즈이동
첫번째 리뷰어가 되어주세요 | 판매지수 270
베스트
프로그래밍 언어 top100 1주
eBook이 출간되면 알려드립니다. eBook 출간 알림 신청
분철서비스 시작 시 알려드립니다. 분철서비스 알림신청
[대학생X취준생] 우리의 영광의 시대는 1학기입니다
[IT 기획전] IT, 모두의 교양
박해선 저자의 머신러닝/딥러닝 패스
비전공자 출신 프론트엔드 개발자 '임효성'님이 추천하는 개발 입문 책
얼리리더를 위한 3월의 책 : WOOF! WOOF! 책멍이 마그넷 증정
3월의 굿즈 : 산리오캐릭터즈 타포린백/물병파우치/3단우산/미니 토트백/마티스 접시&테이블매트 세트
YES24 트윈링 분철 : 인서트라벨/스티커 택1 증정
소장가치 100% YES24 단독 판매 상품
3월 쇼핑혜택
현대카드
1 2 3 4 5

품목정보

품목정보
발행일 2019년 08월 23일
쪽수, 무게, 크기 460쪽 | 880g | 188*235*22mm
ISBN13 9791161753416
ISBN10 1161753419

이 상품의 태그

책소개 책소개 보이기/감추기

목차 목차 보이기/감추기

1장. 함수형 프로그래밍 소개

1.1 함수형 프로그래밍이란 무엇인가?
1.1.1 객체지향 프로그래밍과의 관계
1.1.2 명령형 프로그래밍과 선언형 프로그래밍의 구체적인 예제
1.2 순수 함수
1.2.1 변경 가능한 상태 회피
1.3 함수적으로 사고
1.4 함수형 프로그래밍의 이점
1.4.1 코드 간결성과 가독성
1.4.2 병행성과 동기화
1.4.3 지속적 최적화
1.5 함수형 프로그래밍 언어로서 C++의 진화
1.6 이 책에서 배우는 내용
요약

2장. 함수형 프로그래밍 시작

2.1 함수가 함수를 취한다?
2.2 STL 예제
2.2.1 평균 점수 계산
2.2.2 폴딩
2.2.3 문자열 자르기
2.2.4 조건자에 기반을 두고 컬렉션 분할
2.2.5 필터링과 변환
2.3 STL 알고리즘의 구성 가능성 문제
2.4 자체적인 고차원 함수 작성
2.4.1 함수를 인수로 받기
2.4.2 루프로 구현
2.4.3 재귀와 꼬리 호출 최적화
2.4.4 폴딩을 사용해 구현
요약

3장. 함수 객체

3.1 함수와 함수 객체
3.1.1 자동 반환 형식 추론
3.1.2 함수 포인터
3.1.3 호출 연산자 오버로딩
3.1.4 일반 함수 객체 만들기
3.2 람다와 클로저
3.2.1 람다 구문
3.2.2 람다의 이면
3.2.3 람다에서 임의의 멤버 변수 생성
3.2.4 일반 람다
3.3 함수 객체 작성
3.3.1 STL에서 연산자 함수 객체
3.3.2 다른 라이브러리의 연산자 함수 객체
3.4 std::function 가진 래핑 함수 객체
요약

4장. 새로운 함수 만들기

4.1 부분 함수 애플리케이션
4.1.1 이함 함수를 단항 함수로 변환하는 일반적 방법
4.1.2 std::bind를 사용해 값을 특정 함수 인수에 바인딩
4.1.3 이항 함수의 인수 순서를 뒤집기
4.1.4 더 많은 인수를 가진 함수에 std::bind 사용
4.1.5 std::bind 대안으로 람다 사용
4.2 커링: 함수를 바라보는 다른 방식
4.2.1 커리 함수를 더 쉽게 만들기
4.2.2 데이터베이스 접근에 커리 사용
4.2.3 커리와 부분 함수 애플리케이션
4.3 함수 합성
4.4 함수 필터 다시 살펴보기
4.4.1 일련의 쌍을 뒤집기
요약

5장. 순수성: 가변 상태 회피

5.1 가변 상태의 문제
5.2 순수 함수와 참조 투명성
5.3 부작용이 없는 프로그래밍
5.4 병행 환경에서의 가변과 불변 상태
5.5 const화의 중요성
5.5.1 논리적 상수성과 내부 상수성
5.5.2 임시 값에 대한 멤버 함수 최적화
5.5.3 const 주의 사항
요약

6장. 지연 평가

6.1 C++에서의 지연
6.2 최적화 기법으로서의 지연
6.2.1 컬렉션을 지연해 정렬
6.2.2 사용자 인터페이스의 항목 뷰
6.2.3 함수 결과 캐싱에 의한 재귀 트리 프루닝
6.2.4 지연 형태의 동적 프로그래밍
6.3 일반화된 메모이제이션
6.4 식 템플릿과 지연 문자열 연결
6.4.1 순수성과 식 템플릿
요약

7장. 범위

7.1 범위 소개
7.2 데이터에 대한 읽기 전용 뷰 만들기
7.2.1 범위 용도의 filter 함수
7.2.2 범위 용도의 transform 함수
7.2.3 범위 값의 지연 평가
7.3 범위를 통한 값 변경
7.4 제한 범위와 무한 범위의 사용
7.4.1 입력 범위 처리 최적화에 제한 범위 사용
7.4.2 센티넬로 무한 범위 만들기
7.5 단어 빈도 계산에 범위 사용
요약

8장. 함수형 자료 구조

8.1 불변 연결 리스트
8.1.1 리스트의 시작 부분에 요소 추가와 삭제
8.1.2 리스트의 끝 부분에 요소 추가와 삭제
8.1.3 리스트의 중앙 부분에서 요소 추가와 삭제
8.1.4 메모리 관리
8.2 벡터 유사 가변 자료 구조
8.2.1 비트맵 벡터 트라이에서의 항목 조회
8.2.2 비트맵 벡터 트라이에 항목 추가
8.2.3 비트맵 벡터 트라이의 항목 갱신
8.2.4 비트맵 벡터 트라이의 끝에서 항목 제거
8.2.5 기타 동작과 비트맵 트라이의 전반적인 효율성
요약

9장. 대수적 데이터 유형과 패턴 일치

9.1 대수적 데이터 유형
9.1.1 상속을 통한 합 유형
9.1.2 공용체와 std::variant를 통한 합 유형
9.1.3 특정 상태 구현
9.1.4 특수한 합 유형: 옵션 값
9.1.5 오류 처리를 위한 합 유형
9.2 대수적 데이터 유형으로 도메인 모델링
9.2.1 단순 접근법과 단점
9.2.2 좀 더 세련된 접근법: 하향식 설계
9.3 패턴 매칭에서 대수적 데이터 유형의 향상된 처리
9.4 Mach7 라이브러리를 이용한 강력한 패턴 매칭
요약

10장. 모나드

10.1 예전의 함수자가 아니다
10.1.1 옵션 값 처리
10.2 모나드: 함수자에게 더 많은 능력을
10.3 기본 예제
10.4 범위와 모나드의 내포
10.5 오류 처리
10.5.1 모나드로 std::optional〈T〉
10.5.2 모나드로 expected〈T, E〉
10.5.3 try 모나드
10.6 모나드로 상태 처리
10.7 병행성과 연속 모나드
10.7.1 모나드로서의 퓨처
10.7.2 퓨처 구현
10.8 모나드 결합
요약

11장. 템플릿 메타프로그래밍

11.1 컴파일 시점에 유형 조작
11.1.1 추론된 유형 디버깅
11.1.2 컴파일 동안의 패턴 일치
11.1.3 유형에 관한 메타정보 제공
11.2 컴파일 시점에 유형 속성 검사
11.3 커리 함수 만들기
11.3.1 모든 호출 가능한 것을 호출
11.4 DSL 구축 블록
요약

12장. 병행성 시스템을 위한 함수적 설계

12.1 액터 모델: 구성 요소로 사고
12.2 간단한 메시지 소스 만들기
12.3 반응형 스트림을 모나드로 모델링
12.3.1 메시지를 받기 위한 싱크 만들기
12.3.2 반응형 스트림 변환
12.3.3 주어진 값에 대해 스트림 만들기
12.3.4 스트림의 스트림을 조인
12.4 반응형 스트림 필터링
12.5 반응형 스트림에서의 오류 처리
12.6 클라이언트에 응답
12.7 가변 상태로 액터 만들기
12.8 액터로 분산 시스템 작성
요약

13장. 테스트와 디버깅

13.1 컴파일하는 프로그램이 올바른가?
13.2 단위 테스트와 순수 함수
13.3 테스트 자동 생성
13.3.1 테스트 사례 만들기
13.3.2 속성 기반의 테스트
13.3.3 비교 테스트
13.4 모나드 기반의 병행성 시스템 테스트
요약

저자 소개 (2명)

출판사 리뷰 출판사 리뷰 보이기/감추기

★ 이 책의 대상 독자 ★

이 책은 주로 전문적인 C++ 개발자를 대상으로 한다. 독자가 빌드 시스템을 설정하고 외부 라이브러리를 설치, 사용한 경험이 있다고 가정한다. 더불어 표준 템플릿 라이브러리, 템플릿, 템플릿 인수 추론, 뮤텍스 같은 동시성 프리미티브(primitives)에 대한 기본적 이해가 있어야 한다.
하지만 숙련된 C++ 개발자가 아니더라도 이 책을 이해할 수 있을 것이다. 각 장의 끝에 아직 익숙하지 않을 수 있는 C++ 기능을 설명하는 기사를 링크해뒀다.

★ 이 책의 구성 ★

각 장은 앞 장에서 숙지한 개념을 기본으로 하기 때문에 순차적으로 읽어야 한다. 개념의 난도는 후속 장에서 계속 높아지므로 후반 내용을 읽고 이해가 되지 않는다면 계속 진행하기보다 다시 읽는 편이 낫다. 단, 8장은 예외로, 지속성 자료 구조체 구현에 관한 방법에 관심이 없다면 읽지 않아도 된다.

이 책은 두 부분으로 나뉜다. 첫 부분은 함수형 프로그래밍 관용구와 이들 관용구가 C++에 적용되는 방법을 다룬다. 이 책의 두 번째 부분은 주로 함수형 소프트웨어 설계와 관련된 고급 개념을 다룬다.

이 책을 보는 동안 제시된 모든 개념을 구현하고 동반된 코드 예제를 검토하기 바란다. 이 책에서 다룬 대부분의 기법은 C++ 이전 버전에서 사용할 수 있지만 이렇게 하려면 불필요한 코드를 작성해야 한다. 그래서 주로 C++14와 C++17에 집중했다. 예제는 독자 여러분이 작동하는 C++17 호환 컴파일러를 갖고 있다고 가정한다. GCC나 Clang 중의 하나를 사용할 수도 있다. 이들의 최신 배포 버전은 우리가 사용하고자 하는 C++17의 모든 기능을 지원한다. 모든 예제는 GCC 7.2와 Clang 5.0에서 테스트가 이뤄졌다.
  •  쿠폰은 결제 시 적용해 주세요.
1   31,500
뒤로 앞으로 맨위로 aniAlarm