|
0장 왜 함수형 프로그래밍인가?
0.1 왜 코틀린인가? 0.2 함수형 프로그래밍의 진정한 의미는 무엇인가? ____재사용은 정말 과대평가된 것인가? 0.3 객체 지향 프로그래밍 지식을 일부러 잊어버리기 ____대상과 동작에 집중하기보다 데이터 변환에 집중하기 ____메서드 없는 객체 생성하기 ____불필요한 인터페이스 피하기 ____복잡한 제네릭 타입을 두려워하지 말자 0.4 요약 1장 애플리케이션 준비하기 1.1 예제 애플리케이션 정의하기 ____새 제품 상상해보기 1.2 제타이: 혁신적인 할 일 목록 애플리케이션 ____사용자 스토리 정의하기 ____이벤트 스토밍을 통해 스토리 검증하기 ____목업 준비하기 ____요구 사항을 코드로 작성하기 1.3 테스트가 개발을 안내하게 하라 ____지속 가능한 페이스로 생각하기 ____디자인 방향을 이끌기 ____올바름 보장하기 ____여러 가지 유형의 테스트들 ____테스트에 대한 두 가지 학파 1.4 프로젝트 설정하기 ____테스트 라이브러리 1.5 단위 테스트를 함수형으로 만들기 ____첫 번째 단위 테스트 ____목을 사용하지 말라 1.6 요약 1.7 연습 문제 ____연습 문제 1.1: 슈퍼마켓 이벤트 스토밍 ____연습 문제 1.2: TDD로 할인 금액 계산하기 ____연습 문제 1.3: 1씩 더해가는 테스트 2장 함수로 HTTP 다루기 2.1 프로젝트 시작하기 ____작동하는 골격 2.2 HTML 페이지를 함수적으로 제공하기 ____함수로서의 웹 서버 ____Http4k 소개 ____스파이크: 첫 번째 웹 페이지 ____Http4k 도메인 특화 언어 ____위험 관리 2.3 제타이 시작하기 ____첫 번째 인수 테스트 ____유비쿼터스 언어 ____인수 테스트 실행 2.4 화살표로 디자인하기 ____여러 함수 결합하기 2.5 맵으로부터 목록 제공하기 ____응답 파싱하기 ____스토리 완성하기 2.6 요약 2.7 연습 문제 ____연습 문제 2.1: 함수 연쇄 호출 ____연습 문제 2.2: 함수형 스택 ____연습 문제 2.3: RPN 계산기 3장 도메인 정의 및 테스트 3.1 인수 테스트 개선하기 ____부정적 사례 테스트 ____시나리오 액터 ____애플리케이션 파사드 ____함수로 표현한 단계 3.2 고차 함수 사용하기 ____순수 고차 함수 3.3 인프라에서 도메인 분리하기 ____허브 ____허브를 제타이에 연결하기 3.4 도메인에서 테스트 구동하기 ____프로토콜 ____인수 테스트를 DDT로 전환하기 3.5 DDT를 Pesticide로 변환하기 ____시나리오 ____액션과 프로토콜 ____액터들 ____단계 ____Pesticide DDT로 전환하기 ____애플리케이션 호출하기 ____최종 테스트 3.6 요약 3.7 연습 문제 ____연습 문제 3.1: 계산원 DDT ____연습 문제 3.2: 할인 DDT ____연습 문제 3.3: 결과로 함수 반환하기 ____연습 문제 3.4: 템플릿 엔진 4장 도메인과 어댑터 모델링하기 4.1 목록을 수정하는 새 스토리 시작하기 ____진행 중인 작업 ____도메인 주도 테스트 과정 ____액터 단계 ____HTTP 액션 호출 ____다른 페이지 처리하기 ____CRUD 예제 ____항목을 추가하는 경로 4.2 함수적 의존관계 주입 사용하기 ____객체 지향 의존관계 주입과의 비교 ____부분 적용 ____허브에 항목 추가하기 ____호출 가능한 클래스로서의 함수 ____허브 밖에 목록 저장하기 ____음성(부정적인 경우) 검사하기 ____목록에 항목 추가하기 4.3 함수형 코드 디버깅하기 ____의심이 된다면 출력하라 4.4 함수형 도메인 모델링 ____낮은 카디널리티 ____오류를 나타내도록 널 반환하기 ____널의 문제 ____속성 테스트 ____타입 안의 널이 될 수 있는 필드 ____더 나은 HTML ____HTML 파싱하기 ____고차 함수 추출 4.5 요약 4.6 연습 문제 ____연습 문제 4.1: DiscardUnless ____연습 문제 4.2: 널이 될 수 있는 함수 연쇄 호출하기 ____연습 문제 4.3: 커링 ____연습 문제 4.4: 호출 가능 객체 5장 이벤트를 사용해 상태 수정하기 5.1 할 일 목록 만들고 표시하기 ____사용자 목록 페이지 만들기 ____HTTP DDT로 전환 ____도메인 전용 DDT 통과시키기 ____사용자의 할 일 목록 페이지 생성하기 5.2 변경된 상태 저장하기 ____이벤트 소싱 ____불변 데이터로 상태 변경하기 ____임시 가변성 ____변경 가능한 지역 변수 제거하기 5.3 재귀의 힘 활용하기 ____접을 수 있게 만들기 ____왼쪽 접기와 오른쪽 접기 5.4 이벤트 접기 ____유한 상태 기계 구현하기 ____유니언 타입 ____복합 타입의 카디널리티 계산하기 ____상태 변경 정의하기 5.5 모노이드 알아보기 5.6 요약 5.7 연습 문제 ____연습 문제 5.1: 재귀 ____연습 문제 5.2: 접기 ____연습 문제 5.3: 유니언 타입 ____연습 문제 5.4: 모노이드 6장 커맨드 실행해서 이벤트 생성하기 6.1 새 목록 만들기 ____새 목록을 만드는 DDT 추가하기 ____HTML UI에 버튼 추가하기 ____HTTP 핸들러에 경로 추가하기 6.2 커맨드를 사용해 상태 변경하기 ____커맨드에서 이벤트 생성하기 6.3 상태와 이벤트로 도메인 모델링하기 ____트랜잭션 엔티티 ____엔티티 상태 ____ToDoListEvent ____ToDoListState 6.4 함수형 상태 기계 작성하기 ____이벤트 스토어 6.5 허브 연결하기 ____읽기 모델 ____목록에 항목 추가하기 6.6 커맨드와 이벤트 더 잘 이해하기 ____변경 가능한 상태와 변경 불가능한 상태 ____정체성과 엔티티 ____이벤트 소싱 애플리케이션 지원 6.7 요약 6.8 연습 문제 ____연습 문제 6.1: 엘리베이터를 상태 기계로 모델링하기 ____연습 문제 6.2: 이벤트를 사용해 엘리베이터 상태 유지하기 ____연습 문제 6.3: 고장 상태 추가하기 7장 함수형으로 오류 처리하기 7.1 오류를 더 잘 처리하기 ____널로 오류 처리하기 ____오류 반환하기 ____예외를 예외적으로 유지하기 ____함수형 오류 처리 7.2 펑터와 카테고리 배우기 ____코드에서 카테고리 정의하기 7.3 코드에서 펑터 정의하기 ____제네릭스는 타입 빌더다 ____변환과 리프트 ____펑터의 법칙 ____펑터로 리스트 살펴보기 7.4 펑터를 사용해 오류 처리하기 ____유니언 타입으로 오류 처리하기 7.5 결과 다루기 ____실패 시 끝내기 ____더 정확한 오류 ____함수적 효과 ____코드 정리하기 ____결과 테스트하기 7.6 요약 7.7 연습 문제 ____연습 문제 7.1: 펑터 합성하기 ____연습 문제 7.2: 펑터 법칙 검증하기 ____연습 문제 7.3: 실패 변환하기 ____연습 문제 7.4: 예외 잡아내기 8장 펑터를 사용해 이벤트 투영하기 8.1 이벤트 투영하기 ____첫 번째 투영 정의하기 ____행 다루기 ____맵에서 이벤트 투영하기 ____첫 번째 투영 ____투영 질의하기 8.2 펑터에서 질의 실행하기 ____지연 계산 활용하기 ____결과를 하나로 합치기 ____fetcher 제거하기 8.3 펑터 관점에서 생각하기 ____‘다음에 할 일’ 페이지 만들기 8.4 커맨드와 질의 책임 분리(CQRS) 8.5 요약 8.6 연습 문제 ____연습 문제 8.1: 지연 계산 ____연습 문제 8.2: 상태가 있는 함수 ____연습 문제 8.3: 엘리베이터 투영 9장 모나드를 사용해 데이터를 안전하게 영속화하기 9.1 안전하게 영속화하기 ____데이터베이스의 종류 ____PostgreSQL과 통합 테스트하기 9.2 코틀린으로 데이터베이스에 연결하기 ____이벤트 스토어용 테이블 스키마 ____이벤트를 JSON으로 변환하기 ____투영을 위한 테이블 스키마 ____데이터베이스 준비 ____효과와 부수 효과 ____테이블에 읽고 쓰기 ____Exposed 확장 프로그램 9.3 함수형 방식으로 원격 데이터에 접근하기 ____컨텍스트 리더 ____데이터베이스에 투영 저장하기 9.4 모나드의 힘 살펴보기 ____엔도펑터 ____모나드란 무엇인가? ____모나드가 아닌 것 ____모나드 법칙 ____Outcome 모나드 ____리더 모나드 ____타입 클래스와 인터페이스 ____모나드에 대한 마지막 한마디 9.5 요약 9.6 연습 문제 ____연습 문제 9.1: ContextReader에 대한 모나드 법칙 ____연습 문제 9.2: join을 가지고 bind 구현하기 10장 커맨드 처리를 위해 컨텍스트 읽기 10.1 모나드로 데이터베이스에 접근하기 ____EventStreamer와 ContextReader ____인메모리 이벤트 스트리머 다시 작성하기 ____데이터베이스에 저장된 이벤트 스트림 10.2 컨텍스트 리더를 사용해 커맨드 처리하기 ____모나드 변환기 ____커맨드를 동시에 실행하기 ____모두 함께 엮기 10.3 데이터베이스에서 투영 질의하기 ____투영 영속화 ____데이터베이스에서 투영 갱신 ____unaryPlus 연산자를 사용한 DSL ____SQL로 질의 작성하기 ____질의 핸들러 작성하기 10.4 이벤트 소싱을 통한 도메인 모델링 ____상태 기계 정의하기 ____이벤트 마이그레이션과 버전 관리 10.5 요약 10.6 연습 문제 ____연습 문제 10.1: 로거 모나드 ____연습 문제 10.2: 콘솔 모나드 ____연습 문제 10.3: 콘솔 모나드 RPN 계산기 11장 애플리커티브로 데이터 검증하기 11.1 목록 이름 변경하기 ____목록 이름 변경 커맨드 ____목록 이름 변경 이벤트 ____이름 변경 이벤트 투영하기 ____잘못된 이름 변경 오류 ____DDT 통과시키기 11.2 파라미터가 두 개인 함수 변환 ____사용자 입력 검증 ____오류 수집 11.3 검증을 통한 유효성 검사 ____오류를 사용자에게 반환하기 ____비지역 반환 제거하기 11.4 애플리커티브 펑터 결합하기 ____순회 ____시퀀스 ____성능에 대한 경고 ____순차적 적용 ____중위 표기법 ____애플리커티브 법칙 ____모나드와 애플리커티브 ____커맨드를 처리하는 패턴 11.5 사용자 인터페이스 개선하기 ____함수형 템플릿 엔진 ____더 나은 검증 오류 표시 11.6 요약 11.7 연습 문제 ____연습 문제 11.1: 결과 축소하기 ____연습 문제 11.2: 애플리커티브 컨텍스트 리더 ____연습 문제 11.3: 목록 항목 편집하기 ____연습 문제 11.4: 목록 항목 삭제하기 12장 모니터링과 함수형 JSON 12.1 애플리케이션 모니터링하기 ____클라우드 모니터링 플랫폼 ____함수형 로깅 ____전통적인 로깅 ____페퍼다인의 로깅 법칙 ____테스트 주도 로깅 ____스트림에 로그 남기기 ____더 자세한 오류 ____함께 연결하기 ____되돌아보기 12.2 구조화된 로깅 ____LogEntry ____LogContext ____JsonLogger ____컨텍스트 전달하기 12.3 JSON을 함수형으로 만들기 ____KondorJson 라이브러리 ____JSON 변환기 ____12.4 프로펑터 소개 ____반공변 펑터 ____프로펑터 12.5 데이터베이스 호출 로깅 12.6 요약 12.7 연습 문제 ____연습 문제 12.1: 모니터링 개선 ____연습 문제 12.2: Klaxon 제거하기 ____연습 문제 12.3: 사용자가 항목 순서를 변경할 수 있게 하기 ____연습 문제 12.4: 새로운 목록 상태 도입 13장 함수형 아키텍처 디자인하기 13.1 단순성 추구 ____모듈과 하위 도메인 ____모듈로 빌드하기 ____함수형 모듈화 ____공유된 데이터 구조 ____동기적 프로토콜과 비동기적 프로토콜 13.2 전체 시스템 디자인하기 ____제타이 예제 사용하기 ____진화 ____멀티 모듈 애플리케이션 13.3 코드로 변환하기 ____모노리포 ____지속적 빌드와 통합 ____배포 단위 13.4 마지막 고려 사항 13.5 연습 문제 ____연습 문제 13.1: 최종 연습 문제 부록 A 함수형 프로그래밍이란 무엇인가? A.1 기원 ____람다 계산법 ____참조 투명성 ____카테고리 이론 A.2 참조 투명성 달성하기 ____함수를 순수하게 유지하라 ____가변 타입을 신뢰하지 마라 ____가능한 입력을 모두 고려하라 A.3 사상으로 생각하기 ____함수를 데이터로 취급하라 ____타입을 정확하게 정의하라 ____선언형 스타일을 선호하라 ____게으름을 피워라 A.4 요약 부록 B 함수형 코틀린에 대하여 B.1 코틀린 설정하기 ____그레이들 ____Hello World ____자동 변환기 B.2 코틀린 개론 ____임시 변수 ____함수 ____함수 타입 ____Unit ____Nothing ____람다 변수 ____확장 함수 ____새로운 함수 반환하기 ____영역 함수 ____클래스 ____객체와 동반 객체 ____데이터 클래스 ____위임을 통한 구현 ____위임 프로퍼티 ____타입 별명 ____내부 가시성 ____when ____봉인된 클래스 ____봉인된 인터페이스 ____tailrec 키워드 ____시퀀스 B.3 코틀린 타입 시스템 탐구 ____널이 될 수 있는 타입 ____중위 함수 ____연산자 부록 C 약간의 이론 C.1 카테고리 이론 ____집합과 함수 ____카테고리란 무엇인가? ____빈 카테고리 ____모노이드 ____Set 카테고리 ____컴퓨터 언어 카테고리 ____부분 카테고리 ____다이어그램 C.2 모든 것은 사상에 관한 것이다 ____동형사상 ____시작 대상과 끝 대상 ____반대 카테고리 C.3 타입에 대한 타입 ____곱 타입과 쌍대곱 타입 ____지수 타입 C.4 펑터는 매퍼다 ____딸림 펑터 ____엔도펑터 ____자연 변환 C.5 신비한 모나드 ____쌍대모나드(코모나드) ____클라이슬리 카테고리 C.6 요네다로 모든 것 연결하기 ____hom 펑터 ____반공변 펑터 ____요네다 보조정리 C.7 결론 부록 D 추가 자료 D.1 프로그래밍 ____코틀린 ____함수형 프로그래밍 ____TDD D.2 카테고리 이론 ____책 ____블로그 ____비디오 |
Uberto Barbini
오현석의 다른 상품