본문 바로가기

도서 소개

스칼라로 배우는 함수형 프로그래밍

 

이 책은 현재 절판입니다. 그간 읽어주신 분들께 감사드립니다.

 

스칼라의 창시자, 마틴 오더스키 강력 추천!

함수적 설계에 대한 영감을 불어넣는 완벽한 튜토리얼!

 

출판사 제이펍

원출판사 Manning

원서명 Functional Programming in Scala(ISBN: 9781617290657)

지은이 폴 키우사노(Paul Chiusano), 루나르 비아르드나손(Rύnar Bjarnason)

옮긴이 류광

출판일 2015년 3월 16일

페이지 424쪽

판 형 46배판 변형(188*245*20)

제 본 무선(soft cover)

정 가 28,000원

ISBN 979-11-85890-18-0 (93000)

키워드 함수형 프로그래밍 / scala / java / 모듈성 / 순수 함수 / 모나드 / 모노이드

분 야 IT / 프로그래밍

관련 사이트

원출판사 도서소개 페이지

아마존 도서소개 페이지

독자 Q&A(역자 운영)

 

관련 포스트

2015/03/05 - [출간전 책소식] - 스칼라와 자바 개발자를 위한 궁극의 함수형 프로그래밍 입문서!

 

관련 시리즈

■ (없음)

 

관련 파일 다운로드(

예제 소스 코드와 연습문제 힌트와 해답, 참고자료)

https://github.com/fpinscala/fpinscala

 

 

강의 자료(교재로 채택하신 분들은 출판사로 메일 주세요) => jeipubmarketer@gmail.com

■ 본문의 그림과 표

관련 도서

하스켈로 배우는 함수형 프로그래밍

 

샘플 PDF(차례, 옮긴이 머리말, 추천사, 머리말, 감사의 글, 이 책에 대하여, 베타리더 후기, 1장 함수형 프로그래밍이란 무엇인가?, 찾아보기)

스칼라로배우는함수형프로그래밍_sample.pdf
다운로드

 

정오표 페이지

■ (등록되는 대로 링크를 걸어드리겠습니다.)

 

 

도서구매 사이트(가나다순)

[강컴] [교보문고] [도서11번가] [반디앤루니스] [알라딘] [예스이십사] [인터파크]

도서 소개

“함수형 프로그래밍에 대한 접근방식이, 결국은 아름다운 코드와 계산의 본질에 대한 깊은 통찰로도 이어짐을 보여주는 책!”

_스칼라의 창시자 마틴 오더스키(Martin Odersky) 추천사 중에서

 

함수적 설계에 대한 영감을 불어넣는 완벽한 튜토리얼!

 

함수형 프로그래밍(functional programming)은 프로그램 상태에 의존하지 않는 함수들을 강조하는 소프트웨어 개발 스타일이다. 함수적 코드는 그렇지 않은 코드에 비해 검사와 재사용이 쉽고, 병렬화가 간단하며, 버그를 만들 여지도 적다. 스칼라는 함수형 프로그래밍을 잘 지원하는 신흥 JVM 언어이다. 스칼라는 Java 언어와 문법이 비슷하고 Java 코드와 투명하게 연동되기 때문에 함수형 프로그래밍을 처음 배우기에 아주 적합하다.

 

이 책은 함수형 프로그래밍을 배우고 일상적인 코딩 업무에 적용하고자 하는 프로그래머를 위한 일련의 튜토리얼로 구성되어 있다. 이 책은 논리적이고 간결하며 명확한 단계를 거쳐 기본 기법에서 고급 주제로 나아간다. 또한, 함수형 프로그래밍의 세계를 열어주는 구체적인 예제와 연습문제를 제공한다.

 

이 책의 주요 내용

■ 함수형 프로그래밍의 기본 개념과 응용 기법

■ 스칼라 문법 기초

■ 함수형 프로그래밍을 이용한 병렬 프로그램 작성

■ 독자의 이해 정도를 확인할 수 있는 연습문제들

 

이 책은 함수형 프로그래밍을 전혀 모르는 독자도 읽을 수 있지만, 스칼라와 Java에 대한 사전 지식이 있다면 도움이 된다.

 

추천사

“스칼라와 Java 8 개발자를 위한 궁극의 함수형 프로그래밍 지침서!”

—TekSystems의 윌리엄 E. 휠러

 

“스칼라를 ‘더 나은 Java’ 이상의 것으로 끌어올리는 접근방식과 사고방식을 보여준다.”

—페르난도 도블라데스(Fernando Dobladez), Code54

 

“코딩 연습문제는 의욕을 돋우고, 재미있으며, 실제 응용을 위한 정보도 제공한다.”

—크리스 노로스(Chris Nauroth), Hortonwrokd

 

“그냥 읽는 것이 아니라 실습하면서 배운다.”

—더글러스 앨런(Douglas Alan), 하버드·MIT 엘리 & 에디스 L. 브로드 연구소

 

저자 소개

폴 키우사노(Paul Chiusano)

폴 키우사노는 2008년부터 스칼라로 함수적 코드를 작성하고 제출했다. 그의 회사가 스칼라를 처음 접하고 좀 더 사용하게 된 것은 그의 공이다. 그 노력의 일환으로 그는 함수형 프로그램 교과과정을 공동 설계하고, 사내 강좌에서 함수형 프로그래밍에 관심 있는 동료들을 가르쳤다. 폴은 또한 정기적으로 함수형 프로그래밍과 스칼라에 관한 글을 블로그에 올리고, 강연도 한다.

 

루나르 비아르드나손(Rúnar Bjarnason)

루나르 비아르드나손은 20년의 현업 경력을 가진 독학 프로그래머로, 2008년부터는 함수형 프로그래밍에 주력했다. 그는 함수형 프로그래밍과 스칼라 프로그래밍 언어에 대한 블로그를 운영하며, 가끔 강연도 한다.

 

폴과 루나르는 스칼라를 이용한 함수형 프로그래밍 분야에서 잘 알려진 전문가이자 Scalaz 라이브러리의 핵심 기여자이다.

 

역자 소개

류광

옮긴이 류광은 1996년부터 활동해온 프로그래밍 서적 전문 번역가로, 《Game Programming Gems》 시리즈와 《컴퓨터 프로그래밍의 예술》(The Art of Computer Programming) 시리즈, 《C++로 배우는 프로그래밍의 원리와 실제》(Programming—Principles and Practice Using C++), 《UNIX 고급 프로그래밍》(Advanced Programming in UNIX Environment) 제2판과 제3판 등 다양한 분야의 프로그래밍 서적을 50권 넘게 번역했다.

번역과 프로그래밍 외에 소프트웨어 문서화에도 많은 관심이 있으며, 수많은 오픈소스 프로젝트의 표준 문서 형식으로 쓰이는 DocBook의 국내 사용자 모임인 닥북 한국(http://docbook.kr/)의 일원이다. 현재 번역서 정보 사이트 occam’s Razor(http://occamsrazr.net/)와 게임 개발서 정보 및 게임 개발 논의 사이트 GpgStudy(http://gpgstudy.com/)를 운영하고 있다.

 

차례

제1부 함수형 프로그래밍 입문

1장 함수형 프로그래밍이란 무엇인가? 3

1.1 FP의 이점: 간단한 예제 하나 4

1.1.1 부수 효과가 있는 프로그램 4

1.1.2 함수적 해법: 부수 효과의 제거 7

1.2 (순수)함수란 구체적으로 무엇인가? 11

1.3 참조 투명성, 순수성, 그리고 치환 모형 12

1.4 요약 16

더보기

2장 스칼라로 함수형 프로그래밍 시작하기 17

2.1 스칼라 언어의 소개: 예제 하나 18

2.2 프로그램의 실행 21

2.3 모듈, 객체, 이름공간 23

2.4 고차 함수: 함수를 함수에 전달 25

2.4.1 잠깐 곁가지: 함수적으로 루프 작성하기 25

2.4.2 첫 번째 고차 함수 작성 27

2.5 다형적 함수: 형식에 대한 추상 29

2.5.1 다형적 함수의 예 29

2.5.2 익명 함수로 고차 함수 호출 31

2.6 형식에서 도출된 구현 32

2.7 요약 36

3장 함수적 자료구조 37

3.1 함수적 자료구조의 정의 37

3.2 패턴 부합 41

3.3 함수적 자료구조의 자료 공유 44

3.3.1 자료 공유의 효율성 46

3.3.2 고차 함수를 위한 형식 추론 개선 47

3.4 목록에 대한 재귀와 고차 함수로의 일반화 49

3.4.1 그 외의 목록 조작 함수들 52

3.4.2 단순 구성요소들로 목록 함수를 조립할 때의 효율성 손실 55

3.5 트리 56

3.6 요약 58

4장 예외를 이용하지 않은 오류 처리 59

4.1 예외의 장단점 60

4.2 예외의 가능한 대안들 62

4.3 Option 자료 형식 64

4.3.1 Option의 사용 패턴 65

4.3.2 예외 지향적 API의 Option 합성과 승급, 감싸기 70

4.4 Either 자료 형식 75

4.5 요약 78

5장 엄격성과 나태성 81

5.1 엄격한 함수와 엄격하지 않은 함수 83

5.2 확장 예제: 게으른 목록 86

5.2.1 스트림의 메모화를 통한 재계산 피하기 87

5.2.2 스트림의 조사를 위한 보조 함수들 88

5.3 프로그램 서술과 평가의 분리 89

5.4 무한 스트림과 공재귀 93

5.5 요약 98

6장 순수 함수적 상태 99

6.1 부수 효과를 이용한 난수 발생 99

6.2 순수 함수적 난수 발생 101

6.3 상태 있는 API를 순수하게 만들기 103

6.4 상태 동작을 위한 더 나은 API 106

6.4.1 상태 동작들의 조합 108

6.4.2 내포된 상태 동작 109

6.5 일반적 상태 동작 자료 형식 111

6.6 순수 함수적 명령식 프로그래밍 112

6.7 요약 115

제2부 함수적 설계와 조합기 라이브러리

7장 순수 함수적 병렬성 119

7.1 자료 형식과 함수의 선택 120

7.1.1 병렬 계산을 위한 자료 형식 하나 122

7.1.2 병렬 계산의 조합 125

7.1.3 명시적 분기 127

7.2 표현의 선택 130

7.3 API의 정련 132

7.4 API의 대수 138

7.4.1 map에 관한 법칙 139

7.4.2 fork에 관한 법칙 141

7.4.3 법칙 깨기: 미묘한 버그 하나 142

7.4.4 행위자를 이용한 완전 비차단 Par 구현 144

7.5 조합기들을 가장 일반적인 형태로 정련 151

7.6 요약 156

8장 속성 기반 검사 157

8.1 속성 기반 검사의 간략한 소개 157

8.2 자료 형식과 함수의 선택 161

8.2.1 API의 초기 버전 161

8.2.2 속성의 의미와 API 163

8.2.3 생성기의 의미와 API 165

8.2.4 생성된 값들에 의존하는 생성기 167

8.2.5 Prop 자료 형식의 정련 168

8.3 검례 최소화 171

8.4 라이브러리의 사용과 사용성 개선 173

8.4.1 간단한 예제 몇 가지 173

8.4.2 병렬 계산을 위한 검사 모음 작성 175

8.5 고차 함수의 검사와 향후 개선 방향 181

8.6 생성기의 법칙들 183

8.7 요약 184

9장 파서 조합기 라이브러리 187

9.1 대수의 설계: 첫 시도 188

9.2 가능한 대수 하나 195

9.2.1 슬라이싱과 비지 않은 되풀이 197

9.3 문맥 민감성의 처리 201

9.4 JSON 파서 작성 203

9.4.1 JSON 서식 204

9.4.2 JSON 파서 205

9.5 오류 보고 206

9.5.1 가능한 설계 하나 207

9.5.2 오류의 중첩 208

9.5.3 분기와 역추적의 제어 210

9.6 대수의 구현 212

9.6.1 가능한 구현 하나 214

9.6.2 파서들의 순차 실행 215

9.6.3 파서에 이름표 붙이기 216

9.6.4 실패의 극복과 역추적 217

9.6.5 문맥 민감 파싱 218

9.7 요약 221

제3부 함수적 설계의 공통 구조

10장 모노이드 225

10.1 모노이드란 무엇인가? 226

10.2 모노이드를 이용한 목록 접기 229

10.3 결합법칙과 병렬성 230

10.4 예제: 병렬 파싱 233

10.5 접을 수 있는 자료구조 235

10.6 모노이드 합성 237

10.6.1 좀 더 복잡한 모노이드 합성 237

10.6.2 모노이드 합성을 이용한 순회 융합 239

10.7 요약 240

11장 모나드 241

11.1 함수자: map 함수의 일반화 241

11.1.1 함수자의 법칙들 244

11.2 모나드: flatMap 함수와 unit 함수의 일반화 245

11.2.1 Monad 특질 246

11.3 모나드적 조합기 249

11.4 모나드 법칙 251

11.4.1 결합법칙 251

11.4.2 특정 모나드의 결합법칙 성립 증명 253

11.4.3 항등법칙 255

11.5 도대체 모나드란 무엇인가? 256

11.5.1 항등 모나드 258

11.5.2 State 모나드와 부분 형식 적용 259

11.6 요약 264

12장 적용성 함수자와 순회 가능 함수자 265

12.1 모나드의 일반화 265

12.2 Applicative 특질 266

12.3 모나드와 적용성 함수자의 차이 269

12.3.1 적용성 Option과 Option 모나드 269

12.3.2 적용성 Parser 대 Parser 모나드 271

12.4 적용성 함수의 장점 273

12.4.1 모든 적용성 함수자가 모나드는 아니다 273

12.5 적용성 함수자 법칙 277

12.5.1 왼쪽, 오른쪽 항등법칙 277

12.5.2 결합법칙 278

12.5.3 곱의 자연성 법칙 279

12.6 순회 가능 함수자 282

12.7 Traverse의 용도 284

12.7.1 모노이드에서 적용성 함수자로 285

12.7.2 상태 있는 순회 287

12.7.3 순회 가능 구조의 조합 289

12.7.4 순회의 융합 290

12.7.5 중첩된 순회 290

12.7.6 모나드 합성 291

12.8 요약 292

제4부 효과와 입출력

13장 외부 효과와 입출력 297

13.1 효과의 추출 298

13.2 간단한 입출력 형식 300

13.2.1 입력 효과의 처리 301

13.2.2 단순한 IO 형식의 장단점 306

13.3 StackOverflowError 방지 307

13.3.1 제어의 흐름을 자료 생성자로 구체화 308

13.3.2 트램펄린 적용: 스택 넘침에 대한 일반적 해법 311

13.4 좀 더 정교한 IO 형식 312

13.4.1 자유 모나드 314

13.4.2 콘솔 입출력만 지원하는 모나드 316

13.4.3 순수 해석기 319

13.5 비차단 비동기 입출력 321

13.6 범용 IO 형식 324

13.6.1 그 모든 것의 끝에 있는 주 프로그램 325

13.7 IO 형식이 스트림 방식 입출력에 충분하지 않은 이유 326

13.8 요약 328

14장 지역 효과와 변이 가능 상태 331

14.1 순수 함수적 변이 가능 상태 331

14.2 부수 효과를 지역 범위로 한정하는 자료 형식 334

14.2.1 범위 있는 변이를 위한 작은 언어 334

14.2.2 변이 가능 참조의 대수 336

14.2.3 변이 가능 상태 동작의 실행 338

14.2.4 변이 가능 배열 342

14.2.5 순수 함수적 제자리 quicksort 344

14.3 순수성은 문맥에 의존한다 345

14.3.1 부수 효과로 간주되는 것은 무엇인가? 347

14.4 요약 349

15장 스트림 처리와 점진적 입출력 351

15.1 명령식 입출력의 문제점을 보여주는 예제 하나 351

15.2 간단한 스트림 변환기 355

15.2.1 처리 공정의 생성 357

15.2.2 처리 공정의 합성과 추가 361

15.2.3 파일 처리 364

15.3 확장 가능한 처리 공정 형식 365

15.3.1 공급원 368

15.3.2 자원 안전성 보장 370

15.3.3 단일 입력 처리 공정 373

15.3.4 다중 입력 스트림 376

15.3.5 싱크 379

15.3.6 효과 있는 채널 381

15.3.7 동적 자원 할당 382

15.4 응용 384

15.5 요약 385