간편결제, 신용카드 청구할인
인터파크 롯데카드 5% (29,930원)
(최대할인 10만원 / 전월실적 40만원)
북피니언 롯데카드 30% (22,050원)
(최대할인 3만원 / 3만원 이상 결제)
NH쇼핑&인터파크카드 20% (25,200원)
(최대할인 4만원 / 2만원 이상 결제)
Close

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

원제 : Functional Programming in C++: How to improve your C++ programs using functional techniques
소득공제

2013년 9월 9일 이후 누적수치입니다.

공유하기
정가

35,000원

  • 31,500 (10%할인)

    1,750P (5%적립)

할인혜택
적립혜택
  • S-Point 적립은 마이페이지에서 직접 구매확정하신 경우만 적립 됩니다.
추가혜택
배송정보
  • 6/25(화) 이내 발송 예정  (서울시 강남구 삼성로 512)
  • 무료배송
주문수량
감소 증가
  • 이벤트/기획전

  • 연관도서

  • 상품권

AD

책소개

C++에서 지원하는 다양한 함수형 프로그래밍 기법을 통해 최신 앱의 요구 사항을 쉽게 해결하고, 복잡한 프로그램 논리를 단순하게 표현할 수 있으며, 우아한 오류 처리와 효율적인 병행성을 이룰 수 있다. 또한 함수형 프로그래밍 기법을 사용해 C++ 프로그램을 고급화하는 방법을 익힐 수 있으며 프로그래밍에 대한 새로운 사고 방식을 배운다.

출판사 서평

이 책은 C++ 프로그래밍 언어를 가르치기 위한 것이 아니며, 함수형 프로그래밍과 이를 C++에 적용하는 방식을 다룬다. 함수형 프로그래밍은 C++에서 흔히 사용되는 절차적, 객체지향 방식에 비해 소프트웨어 설계와 다른 방식의 프로그래밍에 대한 다른 사고방식을 제공한다.
일반적으로 C++이 객체지향 언어로 오인되기 때문에 이 책의 제목을 본 다수의 사람들은 이상하게 여길 수도 있다. C++는 객체지향 패러다임을 잘 지원하고, 그 이상이 가능하다. 또한 C++는 절차적 패러다임을 지원하며, 일반적 프로그래밍에 대한 C++의 지원은 여타 모든 언어를 보잘것없게 만든다. 그리고 대부분(전부는 아닐지라도)의 함수형 관용구를 꽤 잘 지원한다. 새로운 각 버전의 언어에는 C++에서 함수형 프로그래밍을 좀 더 용이하게 할 수 있는 도구가 추가됐다.

★ 이 책의 대상 독자 ★

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


★ 이 책의 구성 ★

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

이 책은 두 부분으로 나뉜다. 첫 부분은 함수형 프로그래밍 관용구와 이들 관용구가 C++에 적용되는 방법을 다룬다.
1장, ‘함수형 프로그래밍 소개’에서는 FP에 관한 간단한 소개와 FP가 C++에 미치는 이점을 설명한다.
2장, ‘함수형 프로그래밍 시작’에서는 다른 함수를 인수로 받거나 새로운 함수를 반환하는 함수인 고차원 함수(higher-order functions)를 설명한다. C++ 프로그래밍 언어의 표준 라이브러리에 있는 좀 더 유용한 몇 가지 고차원 함수를 사용해 고차원 함수의 개념을 보여준다.
3장, ‘함수 객체’에서는 C++가 함수 또는 함수 유사한 것(일반적인 C함수에서 함수 객체와 람다에 이르기까지)으로 간주하는 여타 모든 것을 다룬다.
4장, ‘새로운 함수 만들기’에서는 이전 함수로부터 새로운 함수를 생성하는 상이한 방법을 설명한다. 또한 std::bind와 람다를 사용하는 부분 함수 응용을 알아보고, 커링(currying)으로 불리는 함수를 살펴보는 다른 방식을 설명한다.
5장, ‘순수성: 가변 상태 회피’에서는 불변 데이터(immutable data, 절대로 변하지 않는 데이터)의 중요성을 다룬다. 또한 가변 상태를 가짐으로써 발생하는 문제와 변수 값을 변경하지 않고 프로그램을 구현하는 방법을 설명한다.
6장, ‘지연 평가’에서는 지연 평가(lazy evaluation)를 심도 있게 살펴본다. 또한 지연 평가가 문자열 연결과 같은 단순한 작업에서 동적 프로그래밍을 사용해 알고리즘 최적화하기에 이르기까지 최적화를 위해 사용할 수 있는 방법을 보여준다.
7장, ‘범위’에서는 가용성과 성능을 향상시키기 위해 표준 라이브러리 알고리즘에 채택한 범위를 설명한다.
8장, ‘함수형 자료 구조’에서는 수정될 때마다 이전 버전의 값을 보존하는 데이터 구조체인 불변 데이터 구조체를 설명한다.

이 책의 두 번째 부분은 주로 함수형 소프트웨어 설계와 관련된 고급 개념을 다룬다.
9장, ‘대수적 데이터 유형과 패턴 일치’에서는 sum 유형을 사용해 프로그램에서 유효하지 않은 상태를 제거하는 방법을 보여준다. 또한 상속과 std::variant를 사용해 sum 유형을 구현하는 방법을 살펴보고 오버로드(overloaded) 함수 객체를 생성해 sum 유형을 처리하는 방법을 설명한다.
10장, ‘모나드’에서는 일반적인 유형을 좀 더 쉽게 처리할 수 있고 벡터와 옵션(optional), 퓨처(futures) 같은 일반적인 유형에서 동작하는 함수를 작성할 수 있게 해주는 추상화 개념인 함수자(functors)와 모나드(monads)를 설명한다.
11장, ‘템플릿 메타프로그래밍’에서는 C++ 프로그래밍 언어로 FP에 유용한 템플릿 메타프로그래밍 기법을 설명한다. 또한 정적 내성 기법(static introspection techniques)과 호출 가능한 객체를 언급하고, 도메인 한정적인 언어를 생성하기 위해 C++에서 템플릿 메타프로그래밍을 사용하는 방법을 다룬다.
12장, ‘병행성 시스템을 위한 함수적 설계’에서는 이 책에서 배운 모든 것을 통합해 병행성 소프트웨어 시스템 설계에 기능적 접근법을 예를 들어 보여준다. 또한 반응형 소프트웨어 시스템 구축에 연속 모나드(continuation monad)를 사용하는 방법을 설명한다.
13장, ‘테스트와 디버깅’에서는 프로그램 테스트와 디버깅에 관한 기능적 접근 방법을 제시한다.

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

[옮긴이의 말]

사람들은 누구나 자신에게 이미 익숙해져 있는 방식으로 문제에 접근하고 해결하려 한다. 프로그램 분야에서도 예외는 아닐 것이다. 이 책의 독자 여러분은 먼저 스스로에게 자문을 해봐야 한다. 나는 어떤 방식으로 문제에 접근하고 그 문제를 해결하기 위해 어떤 기법과 방식을 사용해 왔는지를 말이다.
함수형 프로그래밍 기법으로 작성된 프로그램은 결과를 얻기 위해 수행해야 하는 명령을 지정하기 보다는 결과가 무엇인지를 정의하는 점에서 결과를 계산하기 위해 수행해야 하는 각 단계를 익히 알고 있는 절차적 프로그래밍 기법과는 확연히 다르다. 또한 함수형 프로그래밍 기법은 함수에 대한 추상화를 만든다는 점에서 데이터를 추상화할 수 있는 객체지향 프로그램 기법과 다르다.
이 책은 이미 C++를 숙지한 독자를 대상으로 하며, 함수형 프로그래밍이 무엇인지를 파악하고 이것이 C++에 적용되는 방식을 다룬다. 함수형 프로그래밍은 C++에서 흔히 사용되는 절차적, 객체지향 방식에 비해 소프트웨어 설계와 다른 방식의 프로그래밍에 대한 다른 사고방식을 제공한다.
이 책을 모두 읽었다면 독자 여러분은 C++에서 지원하는 다양한 함수형 프로그래밍 기법을 통해 최신 앱의 요구 사항을 쉽게 해결하고 복잡한 프로그램 논리를 단순하게 표현할 수 있으며, 우아한 오류 처리와 효율적인 병행성을 다룰 수 있을 것이다. 또한 함수형 프로그래밍 기법을 사용해 C++ 프로그램을 고급화하는 방법을 익힐 수 있을 것이다.

목차

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
10.5.2 모나드로 expected
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 모나드 기반의 병행성 시스템 테스트
요약

저자소개

이반 추키츠 [저] 신작알림 SMS신청
생년월일 -

해당작가에 대한 소개가 없습니다.

김점갑 [역] 신작알림 SMS신청
생년월일 -

해당작가에 대한 소개가 없습니다.

전공도서/대학교재 분야에서 많은 회원이 구매한 책

    리뷰

    0.0 (총 0건)

    100자평

    작성시 유의사항

    평점
    0/100자
    등록하기

    100자평

    10.0
    (총 0건)

    판매자정보

    • 인터파크도서에 등록된 오픈마켓 상품은 그 내용과 책임이 모두 판매자에게 있으며, 인터파크도서는 해당 상품과 내용에 대해 책임지지 않습니다.

    상호

    (주)교보문고

    대표자명

    안병현

    사업자등록번호

    102-81-11670

    연락처

    1544-1900

    전자우편주소

    callcenter@kyobobook.co.kr

    통신판매업신고번호

    01-0653

    영업소재지

    서울특별시 종로구 종로 1(종로1가,교보빌딩)

    교환/환불

    반품/교환 방법

    ‘마이페이지 > 취소/반품/교환/환불’ 에서 신청 또는 1:1 문의 게시판 및 고객센터(1577-2555)에서 신청 가능

    반품/교환가능 기간

    변심 반품의 경우 출고완료 후 6일(영업일 기준) 이내까지만 가능
    단, 상품의 결함 및 계약내용과 다를 경우 문제점 발견 후 30일 이내

    반품/교환 비용

    변심 혹은 구매착오로 인한 반품/교환은 반송료 고객 부담
    상품이나 서비스 자체의 하자로 인한 교환/반품은 반송료 판매자 부담

    반품/교환 불가 사유

    ·소비자의 책임 있는 사유로 상품 등이 손실 또는 훼손된 경우
    (단지 확인을 위한 포장 훼손은 제외)

    ·소비자의 사용, 포장 개봉에 의해 상품 등의 가치가 현저히 감소한 경우
    예) 화장품, 식품, 가전제품(악세서리 포함) 등

    ·복제가 가능한 상품 등의 포장을 훼손한 경우
    예) 음반/DVD/비디오, 소프트웨어, 만화책, 잡지, 영상 화보집

    ·시간의 경과에 의해 재판매가 곤란한 정도로 가치가 현저히 감소한 경우

    ·전자상거래 등에서의 소비자보호에 관한 법률이 정하는 소비자 청약철회 제한 내용에 해당되는 경우

    상품 품절

    공급사(출판사) 재고 사정에 의해 품절/지연될 수 있음

    소비자 피해보상
    환불지연에 따른 배상

    ·상품의 불량에 의한 교환, A/S, 환불, 품질보증 및 피해보상 등에 관한 사항은 소비자분쟁해결 기준 (공정거래위원회 고시)에 준하여 처리됨

    ·대금 환불 및 환불지연에 따른 배상금 지급 조건, 절차 등은 전자상거래 등에서의 소비자 보호에 관한 법률에 따라 처리함

    (주)KG이니시스 구매안전서비스서비스 가입사실 확인

    (주)인터파크커머스는 회원님들의 안전거래를 위해 구매금액, 결제수단에 상관없이 (주)인터파크커머스를 통한 모든 거래에 대하여
    (주)KG이니시스가 제공하는 구매안전서비스를 적용하고 있습니다.

    배송안내

    • 교보문고 상품은 택배로 배송되며, 출고완료 1~2일내 상품을 받아 보실 수 있습니다.

    • 출고가능 시간이 서로 다른 상품을 함께 주문할 경우 출고가능 시간이 가장 긴 상품을 기준으로 배송됩니다.

    • 군부대, 교도소 등 특정기관은 우체국 택배만 배송가능합니다.

    • 배송비는 업체 배송비 정책에 따릅니다.

    • - 도서 구매 시 15,000원 이상 무료배송, 15,000원 미만 2,500원 - 상품별 배송비가 있는 경우, 상품별 배송비 정책 적용