목차

1장 멀티패러다임이 현대 언어를 확장하는 방법 1.1 객체지향 디자인 패턴의 반복자 패턴과 일급 함수 __1.1.1 GoF의 반복자 패턴 __1.1.2 ArrayLike로부터 Iterator 생성하기 __1.1.3 ArrayLike를 역순으로 순회하는 이터레이터 만들기 __1.1.4 지연 평가되는 map 함수 __1.1.5 멀티패러다임의 교차점: 반복자 패턴과 일급 함수 1.2 명령형 프로그래밍으로 이터레이터를 만드는 제너레이터 함수 __1.2.1 제너레이터 기본 문법 __1.2.2 제너레이터로 작성한 reverse 함수 1.3 자바스크립트에서 반복자 패턴 사례: 이터레이션 프로토콜 __1.3.1 이터레이터와 이터러블 __1.3.2 언어와 이터러블의 상호작용 __1.3.3 제너레이터로 만든 이터레이터도 이터러블 1.4 이터러블을 다루는 함수형 프로그래밍 __1.4.1 forEach 함수 __1.4.2 map 함수 __1.4.3 filter 함수 __1.4.4 고차 함수 조합하기 __1.4.5 재미난 filter 1.5 이터러블 프로토콜이 상속이 아닌 인터페이스로 설계된 이유 __1.5.1 Web API의 NodeList도 이터러블 __1.5.2 상속이 아닌 인터페이스로 해결해야 하는 이유 __1.5.3 인터페이스와 클래스 상속 1.6 요약 정리 2장 함수형 프로그래밍과 타입 시스템 그리고 LISP 2.1 타입 추론과 함수 타입 그리고 제네릭 __2.1.1 타입 추론 __2.1.2 함수 타입과 제네릭 2.2 멀티패러다임 언어에서 함수형 타입 시스템 __2.2.1 이터레이션 프로토콜과 타입 다시 보기 __2.2.2 함수형 고차 함수와 타입 시스템 __2.2.3 함수 시그니처와 중첩된 함수들의 타입 추론 2.3 멀티패러다임 언어와 메타프로그래밍 - LISP로부터 __2.3.1 Pipe Operator __2.3.2 클래스와 고차 함수, 반복자, 타입 시스템을 조합하기 __2.3.3 LISP(클로저)에서 배우기 - 코드가 데이터, 데이터가 코드 __2.3.4 클로저에서 map이 실행될 때 __2.3.5 멀티패러다임 언어에서 사용자가 만든 코드이자 클래스를 리스트로 만들기 __2.3.6 LISP의 확장성 - 매크로와 메타프로그래밍 __2.3.7 런타임에서 동적으로 기능 확장하기 __2.3.8 언어를 확장하는 즐거움 2.4 요약 정리 3장 코드 : 객체 : 함수 = Generator : Iterator : LISP = IP : OOP : FP 3.1 코드가 곧 데이터 - 로직이 담긴 리스트 __3.1.1 [for, i++, if, break] - 코드를 리스트로 생각하기 __3.1.2 현대 언어에서 리스트 프로세싱 - 클로저, 코틀린, 스위프트, 스칼라, C#, 자바 __3.1.3 언어를 넘어 적용 가능한 개념, 패러다임 3.2 하스켈로부터 배우기 __3.2.1 하스켈의 함수와 함수 시그니처 __3.2.2 언어 차원에서 지원하는 커링 __3.2.3 main 함수와 IO __3.2.4 head, map, filter, foldl 함수 시그니처 __3.2.5 함수 합성 - . 연산자와 $ 연산자 __3.2.6 sumOfSquaresOfOddNumbers 함수 __3.2.7 파이프라인 스타일 - & __3.2.8 Either를 통한 에러 처리 __3.2.9 패턴 매칭 3.3 지연 평가 자세히 살펴보기 __3.3.1 중첩된 이터레이터의 실행 순서 - 제너레이터로 확인하기 __3.3.2 자세히 살펴보기 __3.3.3 이터레이터로 직접 살펴보기 __3.3.4 단순화해서 살펴보기 3.4 Generator :Iterator :LISP - 지연 평가와 안전한 합성 __3.4.1 find 함수 시그니처 __3.4.2 하스켈에서 find 함수와 안전한 합성 __3.4.3 find 함수로 생각하는 지연 평가와 리스트 프로세싱 __3.4.4 타입스크립트에서의 안전한 합성 __3.4.5 every 함수 __3.4.6 some 함수 __3.4.7 지연 평가에 기반한 break 로직 끼워 넣기 __3.4.8 every와 some 함수의 공통 로직을 함수형으로 추상화하기 __3.4.9 concat으로 더하기 3.5 요약 정리 4장 비동기 프로그래밍 4.1 값으로 다루는 비동기 __4.1.1 Promise __4.1.2 new Promise( )를 직접 사용해본 적 있는가 __4.1.3 Promise.race __4.1.4 IO 작업에 타임아웃 설정하기 __4.1.5 응답 속도에 따라 다른 전략으로 UI 렌더링하기 __4.1.6 Promise.all __