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
__