본문내용 바로가기
MD의선택 무료배송 이벤트 소득공제

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

이반 추키츠 지음 | 김점갑 옮김 | 에이콘출판 | 2019년 08월 23일 출간
클로버 리뷰쓰기

이 책의 다른 상품 정보

  • 정가 : 35,000원
    판매가 : 31,500 [10%↓ 3,500원 할인]
  • 혜택 :
    [기본적립] 1750원 적립 [5% 적립] [추가적립] 5만원 이상 구매 시 2,000원 추가적립 안내 [회원혜택] 회원 등급 별, 3만원 이상 구매 시 2~4% 추가적립 안내 [리뷰적립] 리뷰 작성 시 e교환권 최대 300원 추가적립 안내
  • 추가혜택 : 포인트 안내 도서소득공제 안내 추가혜택 더보기
  • 배송비 : 무료 배송비 안내
  • 배송일정 : 서울특별시 종로구 세종대로 기준 지역변경
    당일배송 지금 주문하면 오늘( 2일,목) 도착 예정 배송일정 안내
  • 바로드림 : 인터넷으로 주문하고 매장에서 직접 수령 안내 바로드림 혜택
    휴일에는 바로드림 픽업으로 더 빨리 받아 보세요. 바로드림 혜택받고 이용하기

이 책의 이벤트

해외주문/바로드림/제휴사주문/업체배송건의 경우 1+1 증정상품이 발송되지 않습니다.
  • 책을 통해 성장해나가는 개발자를 응원합니다.
    2017.06.22 ~ 2025.07.31
상품상세정보
ISBN 9791161753416(1161753419)
쪽수 460쪽
크기 188 * 236 * 26 mm /876g 판형알림
이 책의 원서/번역서 Functional Programming in C++: How to improve your C++ programs using functional techniques

책소개

이 책이 속한 분야

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

작가의 말

[지은이의 말]
프로그래밍은 무(無)에서부터 유(有)를 창조할 수 있는 몇 안 되는 분야 중의 하나다. 독자 여러분은 자신이 원하는 방식대로 동작하도록 구축할 수 있다. 컴퓨터만 있으면 된다.
나의 학창 시절 프로그래밍 수업의 대부분은 명령형 프로그래밍(imperative programming) 위주였는데 먼저 C 언어를 통한 절차적 프로그래밍(procedural programming)을 익힌 다음 C++ 및 자바(Java) 언어를 통한 객체지향 프로그래밍(OOP, object-oriented programming)에 집중했다. 대학 시절에도 상황은 크게 변하지 않았고 여전히 객체지향 프로그래밍이 주류를 이뤘다.
그 당시에 모든 언어는 개념적으로 동일하다는 오류에 빠졌다. 언어는 단지 문맥만 상이할 뿐이고 하나의 언어를 통해 반복문과 분기문 같은 기본적 사항을 숙지하면 사소한 수정만으로도 여타 모든 언어로 프로그램을 작성할 수 있다는 생각을 했었다.
대학 시절 수강 과목 중의 하나로 리스프(LISP)를 배웠을 때 함수형 프로그래밍(FP, Functional Programming) 언어를 처음 접했다. 처음에는 본능적으로 if-then-else문과 for 루프를 효과적으로 모방하기 위해 리스프를 사용했다. 리스프에 적응하도록 나의 관점을 변경하기보다는, C로 작성한 것과 동일한 방식으로 프로그램을 작성할 수 있도록 리스프를 잘못된 방식으로 사용하기로 결정한 것이다. 그때는 함수형 프로그래밍에서 그 어떤 것도 깨닫지 못했다. 즉, 리스프를 통해 할 수 있는 것은 C로 훨씬 더 쉽게 할 수 있었다.
내가 FP를 다시 들여다본 것은 한참 후의 일이다. 일부 프로젝트를 진행하면서 사용해야 하는 특정한 언어의 느린 진화에 대한 실망감 때문이었다. for-each 루프가 언어에 추가되면 커다란 장점인 것처럼 선전한다. 즉, 새로운 컴파일러만 다운로드하면 되고 개발이 훨씬 더 쉬워질 것이라고 말이다.
for-each 루프와 같은 새로운 언어 구조를 가지려면 새로운 버전의 언어와 새로운 버전의 컴파일러를 기다려야 한다는 생각이 들었다. 하지만 리스프에서는 간단한 함수로 for 루프를 구현할 수 있다. 컴파일러를 업그레이드할 필요가 없다.
컴파일러의 변경이 없이도 언어를 확장할 수 있는 능력, 이 사실이 나를 FP로 이끌었다. 나는 여전히 객체지향적 사고방식을 갖지만, FP 스타일의 구문을 사용해 객체지향 코드 작성 업무를 단순화하는 방법을 익혔다.
하스켈(Haskell)과 스칼라(Scala), 얼랭(Erlang) 같은 함수형 프로그래밍 언어를 연구하는 데 많은 시간을 투자했다. 객체지향 개발자에게 골칫거리인 문제가 이를 바라보는 새로운 방식(함수적 방식)을 통해 쉽게 처리될 수 있다는 사실에 놀랐다.
내 작업 대부분은 C++ 위주로 이뤄지기 때문에 함수형 프로그래밍 관용구를 사용하기 위한 방법을 모색해야 했다. 세상은 비슷한 생각을 가진 사람들로 가득 차 있었고, 나만이 유일한 사람은 아니었다.
다양한 C++ 콘퍼런스에서 비슷한 생각의 소유자를 만나는 행운도 있었다. 이는 함수형 관용구를 C++에 적용하는 데 있어서 생각을 교환하고 새로운 사실을 익히고 그 경험을 공유하는 절호의 기회였다.
이런 만남의 대부분은 누군가 C++에서 함수형 프로그래밍에 대한 책을 집필한다면 멋진 일이 될 것이라는 통상적인 결론으로 이어졌다. 우리 모두는 자신의 프로젝트에 시도해 볼 아이디어의 원천을 찾는 중이었지만, 문제는 이에 관해 집필하고자 하는 이가 없었다는 점이다.
이 책의 집필을 위해 매닝(Manning) 출판사가 접촉해 왔을 때 처음에는 좌절감이 들었고, 차라리 책을 집필하기보다는 다른 책이 나오면 읽을 것이 낫겠다고 생각했다. 하지만 모든 사람이 이런 식으로 생각한다면 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 모나드 기반의 병행성 시스템 테스트
요약

출판사 서평

이 책은 C++ 프로그래밍 언어를 가르치기 위한 것이 아니며, 함수형 프로그래밍과 이를 C++에 적용하는 방식을 다룬다. 함수형 프로그래밍은 C++에서 흔히 사용되는 절차적, 객체지향 방식에 비해 소프트웨어 설계와 다른 방식의 프로그래밍에 대한 다른 사고방식을 제공한다.
일반적으로 C++이 객체지향 언어로 오인되기 때문에 이 책의 제목을 본 다수의 사람들은 이상하게 여길 수도 있다. C++는 객체지향 패러다임을 잘 지원하고, 그 이상이 가능하다. 또한 C++는 절차적 패러다임을 지원하며, 일반적 프로그래밍에 대한 C++의 지원은 ... 더보기

Klover 리뷰 (0)

북로그 리뷰 (0) 쓰러가기

북로그 리뷰는 본인 인증 후 작성 가능합니다.
책이나 타인에 대해 근거 없이 비방을 하거나 타인의 명예를 훼손할 수 있는 내용은 비공개 처리 될 수 있습니다.
※ 북로그 리뷰 리워드 제공 2021. 4. 1 종료

문장수집 (0) 문장수집 쓰기 나의 독서기록 보기
※구매 후 문장수집 작성 시, 리워드를 제공합니다. 안내

교환/반품/품절안내

※ 상품 설명에 반품/교환 관련한 안내가 있는 경우 그 내용을 우선으로 합니다. (업체 사정에 따라 달라질 수 있습니다.)

교환/반품/품절안내
반품/교환방법 마이룸 > 주문관리 > 주문/배송내역 > 주문조회 > 반품/교환신청 ,
[1:1상담>반품/교환/환불] 또는 고객센터 (1544-1900)

※ 오픈마켓, 해외배송주문, 기프트 주문시 [1:1상담>반품/교환/환불]
    또는 고객센터 (1544-1900)
반품/교환가능 기간 변심반품의 경우 수령 후 7일 이내,
상품의 결함 및 계약내용과 다를 경우 문제점 발견 후 30일 이내
반품/교환비용 변심 혹은 구매착오로 인한 반품/교환은 반송료 고객 부담
반품/교환 불가 사유
  • 소비자의 책임 있는 사유로 상품 등이 손실 또는 훼손된 경우
    (단지 확인을 위한 포장 훼손은 제외)
  • 소비자의 사용, 포장 개봉에 의해 상품 등의 가치가 현저히 감소한 경우
    예) 화장품, 식품, 가전제품(악세서리 포함) 등
  • 복제가 가능한 상품 등의 포장을 훼손한 경우
    예) 음반/DVD/비디오, 소프트웨어, 만화책, 잡지, 영상 화보집
  • 소비자의 요청에 따라 개별적으로 주문 제작되는 상품의 경우 ((1)해외주문도서)
  • 디지털 컨텐츠인 eBook, 오디오북 등을 1회 이상 다운로드를 받았을 경우
  • 시간의 경과에 의해 재판매가 곤란한 정도로 가치가 현저히 감소한 경우
  • 전자상거래 등에서의 소비자보호에 관한 법률이 정하는 소비자 청약철회 제한 내용에
    해당되는 경우
(1) 해외주문도서 : 이용자의 요청에 의한 개인주문상품으로 단순변심 및 착오로 인한 취소/교환/반품 시 ‘해외주문 반품/취소 수수료’ 고객 부담 (해외주문 반품/취소 수수료 : ①서양도서-판매정가의 12%, ②일본도서-판매정가의 7%를 적용)
상품 품절 공급사(출판사) 재고 사정에 의해 품절/지연될 수 있으며, 품절 시 관련 사항에 대해서는
이메일과 문자로 안내드리겠습니다.
소비자 피해보상
환불지연에 따른 배상
  • 상품의 불량에 의한 교환, A/S, 환불, 품질보증 및 피해보상 등에 관한 사항은
    소비자분쟁해결 기준 (공정거래위원회 고시)에 준하여 처리됨
  • 대금 환불 및 환불지연에 따른 배상금 지급 조건, 절차 등은 전자상거래 등에서의
    소비자 보호에 관한 법률에 따라 처리함
바로가기
  • 우측 확장형 배너 2
  • 우측 확장형 배너 2
최근 본 상품