함수형 자바스크립트 입문 2/e [ECMAScript 8로 함수형 프로그래밍 개념부터 라이브러리 구축까지]
- 원서명Beginning Functional JavaScript, 2nd edition: Uncover the Concepts of Functional Programming with EcmaScript 8 (ISBN 9781484240861)
- 지은이안토 아라빈스(Anto Aravinth), 스리칸스 마치라주(Srikanth Machiraju)
- 옮긴이이창화
- ISBN : 9791161753997
- 30,000원
- 2020년 02월 26일 펴냄
- 페이퍼백 | 340쪽 | 188*235mm
- 시리즈 : 프로그래밍 언어
책 소개
요약
자바스크립트를 함수형 패러다임으로 소개한다. underscore.js와 유사한 함수형 라이브러리를 만들면서 함수형 프로그래밍을 이해한다. 함수형 패러다임의 기초인 1급 함수, 고차 함수, 커링, 클로저 등을 ES8의 최신 버전으로 알아본다. 합성 함수를 자세히 배우고, 함수자와 모나드도 알아본다. async와 await 등과 같이 ES8에서 제공되는 새로운 특성을 여러 함수와 함께 배워본다. 마지막으로 함수형 자바스크립트 단위 테스팅과 프레임워크를 소개한다.
이 책에서 다루는 내용
■ 문자열 패딩, 비동기 함수와 같은 함수형 프로그래밍 개념
■ 자바스크립트에서 함수를 다루는 방법
■ underscore.js와 유사한 함수형 라이브러리 작성
■ 스프레드 연산자나 제너레이터와 같은 ES8 함수형 특성
■ 함수형 패러다임에 따라 React-Redux 패턴처럼 동작하는 라이브러리 작성
이 책의 구성
함수형 프로그래밍 개념과 자바스크립트 언어의 함수형 본질을 이해할 수 있도록 돕는다. 함수형 프로그래밍 개념을 소개하는 것부터 시작해서 선언형과 함수형 프로그래밍의 핵심적인 차이점을 알아본다. 자바스크립트 함수를 직접 파고들며 ES8로 작성하는 방법을 배운다. 이후 고차 함수로 이동해 ‘데이터로서의 함수'가 어떻게 가능성의 세계를 여는지 살펴본다.
그런 다음 클로저로 고차 함수를 작성한다. 배열을 소개하고 함께 사용할 수 있는 API를 소개한다. 커링과 부분 적용을 사용해 특정 함수를 다른 함수로 바꾸는 방법을 살펴본다. 합성 함수를 자세히 다루고 함수자와 모나드도 알아본다. 응용할 수 있는 함수를 자세히 알아본 후, async와 await처럼 ES8에서 제공하는 새로운 특성을 알아본다. 이 책에서 배운 함수형 개념을 사용해 HTML 애플리케이션을 구성하는 데 사용할 수 있는 작은 라이브러리를 작성한다. 마지막으로 함수형 자바스크립트의 단위 테스팅 개념과 프레임워크, 도구를 소개한다.
이 책에서는 함수형 툴킷을 사용해 웹 애플리케이션 개발에 필요한 작은 라이브러리를 구성하는 방법과 함수형 코드를 테스트하는 방법을 알아본다.
목차
목차
- 1장. 간단하게 살펴보는 함수형 프로그래밍
- 함수형 프로그래밍이란 무엇이고, 왜 중요한가?
- 참조적 투명성
- 명령형, 선언형, 추상화
- 함수형 프로그래밍의 장점
- 순수 함수
- 순수 함수는 테스트하기 편한 코드다
- 이상적 코드
- 병렬 코드
- 캐시 가능
- 파이프라인과 컴포저블
- 순수 함수는 수학적인 함수다
- 작업해야 할 것
- 자바스크립트는 함수형 프로그래밍 언어인가?
- 요약
- 2장. 자바스크립트 함수의 기본
- ECMAScript 역사
- 함수 생성과 실행
- 첫 번째 함수
- 엄격한 방식
- 상태 반환은 옵션이다
- 다양한 상태 함수
- 함수 인자
- ES5 함수는 ES6 이후에서도 동작한다
- 프로젝트 구성
- 초기 구성
- 반복 문제에 대한 첫 번째 함수적 접근
- 출력
- 입력
- 바벨-노드를 사용한 코드 실행
- npm에서 스크립트 작성
- 깃을 이용한 코드 실행
- 요약
- 3장. 고차 함수
- 데이터의 이해
- 자바스크립트 데이터형 이해
- 함수 저장
- 함수 전달
- 함수 반환
- 추상화와 고차 함수
- 추상화 정의
- 고차 함수를 통한 추상화
- 현실에서의 고차 함수
- every 함수
- some 함수
- sort 함수
- 요약
- 데이터의 이해
- 4장. 클로저와 고차 함수
- 클로저 이해
- 클로저란?
- 어디서부터 생겨났을까?
- sortBy 함수 다시 살펴보기
- 실제 세계에서의 고차 함수(계속)
- tap 함수
- unary 함수
- once 함수
- memoize 함수
- assign 함수
- 요약
- 클로저 이해
- 5장. 배열로 함수형 다루기
- 배열로 함수형 다루기
- map
- filter
- 연산 연결
- concatAll
- 함수 축소
- reduce 함수
- 함수 압축
- zip 함수
- 요약
- 배열로 함수형 다루기
- 6장. 커링과 부분 적용
- 용어 정리
- 단항 함수
- 이항 함수
- 가변 인자 함수
- 커링
- 커링을 사용하는 경우
- 커링을 사용한 logger 함수
- 커링 다시 살펴보기
- 다시 logger 함수로
- 커링의 실제 사용
- 배열 요소에서 숫자 검색
- 배열 제곱
- 데이터 플로우
- 부분 적용
- 부분 함수 구현
- 커링과 부분 적용
- 요약
- 용어 정리
- 7장. 컴포지션과 파이프라인
- 일반적인 용어에서의 컴포지션
- 유닉스 철학
- 함수형 컴포지션
- map, filter 다시 살펴보기
- compose 함수
- compose 함수 다루기
- 구원자: curry와 partial
- 여러 함수 합성
- 파이프라인과 시퀀스
- 파이프 구현
- 컴포지션의 특이점
- 파이프라인 연산자
- tap 함수를 사용한 디버깅
- 요약
- 일반적인 용어에서의 컴포지션
- 8장. 함수자
- 함수자란?
- 함수자는 컨테이너다
- map 구현
- MayBe
- MayBe 구현
- 간단한 사용자 케이스
- 실제 사용자 케이스
- Either 함수자
- Either 구현
- Reddit 예제 Either 버전
- 주의할 단어: 포인팅된 함수자
- 요약
- 함수자란?
- 9장. 모나드
- 검색 쿼리용 Reddit 댓글 가져오기
- 문제
- 첫 번째 단계 구현
- Reddit 호출 병합
- 중첩된/다양한 map의 문제
- join으로 문제 해결
- join 구현
- chain 구현
- 모나드란?
- 요약
- 10장. 제너레이터를 통한 정지, 재개, 비동기
- 비동기 코드와 그 문제
- 콜백 지옥
- 제너레이터 101
- 제너레이터 생성
- 제너레이터의 경고
- yield 키워드
- 제너레이터의 done 속성
- 제너레이터에 데이터 전달
- 비동기 호출 조작에 제너레이터 사용
- 비동기용 제너레이터: 간단한 경우
- 비동기를 위한 제너레이터: 실세계 경우
- ECMAScript 2017의 비동기 함수
- Promise
- await
- async
- 콜백 연결하기
- 비동기 호출에서 에러 핸들링
- 제너레이터로 트랜스파일된 비동기 함수
- 요약
- 비동기 코드와 그 문제
- 11장. 반응형 라이브러리 빌드
- 불변성
- 간단한 Redux 라이브러리 빌드
- HyperApp과 같은 프레임워크 구성
- 가상 DOM
- JSX
- JS Fiddle
- createActions
- render
- patch
- update
- merge
- remove
- 요약
- 12장. 테스트와 마무리
- 소개
- 테스팅의 종류
- BDD와 TDD
- 자바스크립트 테스트 프레임워크
- Mocha를 사용한 테스팅
- Sinon을 사용한 모의 테스트
- Jasmine을 통한 테스팅
- 코드 커버리지
- Linting
- 라이브러리 코드 단위 테스팅
- 마무리
- 요약
도서 오류 신고
정오표
정오표
[p.21 : 아래서 2행]
http://www.acornpub.com/book/functionaljavascript-2e에서 한국어판 정오표를 볼 수 있다.
->
http://www.acornpub.co.kr/book/functional-javascript-2e에서 한국어판 정오표를 볼 수 있다.
[p.48 : 아래서 9행]
자바스크립트 파일에서 엄격하게 사용하지 않는 모든 코드는 엄격하지 않은 방식도 있다.
->
엄격한 방식(strict 모드)이 있는데, 이는 자바스크립트 파일에서 사용하지 않으면 엄격한 방식이 아니다.
[p.71 : 2행]
for(let i=0;array.length;i++)
->
for(let i=0;i<array.length;i++)
[p.89 : 6행]
잎 절에서
->
앞 절에서
[p.120 : reduce 함수 첫 번째 구현 코드 부분]
accumlator
->
accumulator (*이후 코드, 내용에도 수정 필요)
[p.146 : 4행]
이를 이해하면 cuury 함수를 사용해 multipy 함수를 실행할 수 있다.
->
이를 이해하면 curry 함수를 사용해 multiply 함수를 실행할 수 있다.
[p.169]
filterGoodVBooks 함수를 전달하고,
->
filterGoodBooks 함수를 전달하고,
[p.171]
6장에서 n개의 함수 호출
->
5장에서 n개의 함수 호출
[p.172]
composeN(oddOrEven, ... )
->
compose(oddOrEven, ... )