Home 코틀린으로 배우는 함수형 프로그래밍
Post
Cancel

코틀린으로 배우는 함수형 프로그래밍

표지

cover

목차

1장 함수형 프로그래밍이란?

1.1 함수형 프로그래밍의 특징

1.2 순수한 함수란 무엇인가?

____동일 입력 동일 출력

____부수효과 없는 코드

____순수한 함수의 효과와 그외 고려사항

1.3 부수효과 없는 프로그램 작성하기

____공유 변수 수정으로 인한 부수효과

____객체의 상태 변경으로 인한 부수효과

1.4 참조 투명성으로 프로그램을 더 안전하게 만들기

____참조 투명하지 않은 함수

____참조 투명한 함수

1.5 일급 함수란?

____일급 객체(first-class object)

____일급 함수(first-class function)

1.6 일급 함수를 이용한 추상화와 재사용성 높이기

____간단한 계산기 예제

____객체지향적으로 개선한 계산기 예제

____함수형 프로그래밍 방식으로 개선한 계산기 예제

1.7 게으른 평가로 무한 자료구조 만들기

____무한대 값을 자료구조에 담다

1.8 마치며

____코틀린으로 함수형 프로그래밍 시작하기

2장 코틀린으로 함수형 프로그래밍 시작하기

2.1 프로퍼티 선언과 안전한 널 처리

____프로퍼티 선언

____안전한 널 처리

2.2 함수와 람다

____함수를 선언하는 다양한 방법

____매개변수에 디폴트값 설정하기

____익명 함수와 람다 표현식

____확장 함수

2.3 제어 구문

____if문

____when문

____for문

2.4 인터페이스

____인터페이스의 특징

____인터페이스 선언하고 상속하기

____인터페이스에 추상 함수 선언하기

____추상 함수 구현하기

____추상 프로퍼티의 선언과 사용

2.5 클래스

____클래스와 프로퍼티

____data 클래스

____enum 클래스

____sealed 클래스

2.6 패턴 매칭

____다양한 패턴 정의 방법

____조건에 따른 패턴 매칭

____코틀린 패턴 매칭의 제약

2.7 객체 분해

2.8 컬렉션

____리스트와 세트

____맵

2.9 제네릭

____제네릭 함수 선언

2.10 코틀린 표준 라이브러리

____let 함수

____with 함수

____run 함수

____apply 함수

____also 함수

____let, with, run, apply, also 함수 비교

____use 함수

2.11 변성

____무공변의 의미와 예

____공변의 의미와 예

____반공변의 의미와 예

____in, out으로 변성 선언하기

2.12 마치며

3장 재귀

3.1 함수형 프로그래밍에서 재귀가 가지는 의미

____피보나치 수열을 명령형 프로그래밍으로 구현한 예제

____피보나치 수열을 재귀로 구현한 예제

____함수형 프로그래밍에서 재귀

3.2 재귀를 설계하는 방법

____재귀 함수 설계 방법

____재귀가 수행되는 흐름 관찰해 보기

____재귀 함수 설계 방법을 사용하여 코드를 구현하기

3.3 재귀에 익숙해지기

____reverse 함수 예제

____take 함수 예제

____repeat 함수 예제

____zip 함수 예제

3.4 메모이제이션으로 성능 개선하기

____재귀적인 방식의 피보나치 수열 예제

____메모이제이션을 사용한 피보나치 수열 예제

____재귀의 문제점을 함수적으로 해결하기

3.5 꼬리 재귀로 최적화하기

____꼬리 재귀 최적화란?

____maximum 함수를 꼬리 재귀로 다시 작성하기

____reverse 함수 꼬리 재귀로 다시 작성하기

____take 함수를 꼬리 재귀로 다시 작성하기

____zip 함수를 꼬리 재귀로 다시 작성하기

3.6 상호 재귀를 꼬리 재귀로 최적화하기

____상호 재귀

____트램펄린

3.7 실전 응용

____멱집합을 구하는 함수

3.8 마치며

4장 고차 함수

4.1 고차 함수란?

____고차 함수 조건을 만족하는 예

____코드의 재사용성을 높인다

____기능의 확장이 쉽다

____코드를 간결하게 작성할 수 있다

4.2 부분 함수

____부분 함수의 예

____부분 함수 만들기

____부분 함수의 필요성

4.3 부분 적용 함수

4.4 커링 함수

____코틀린용 커링 함수 추상화하기

4.5 합성 함수

____함수 합성 일반화하기

____포인트 프리 스타일 프로그래밍

____하나 이상의 매개변수를 받는 함수의 합성

4.6 실전 응용

____zipWith 함수

____콜백 리스너를 고차 함수로 대체하기

4.7 마치며

5장 컬렉션으로 데이터 다루기

5.1 함수형 컬렉션의 데이터 처리

____간단한 리스트 자료구조 만들기

____addHead 함수 만들기

____appendTail 함수 만들기

____꼬리 재귀로 작성한 appendTail 함수의 시간 복잡도

____getTail 함수 만들기

5.2 컬렉션 데이터 걸러 내기

____명령형 방식 vs. 함수형 방식

____filter 함수 만들기

5.3 컬렉션 데이터 변경하기

____명령형 방식 vs. 함수형 방식

____map 함수 만들기

5.4 컬렉션 데이터 단계별로 줄이기

____foldLeft 함수 만들기

____foldLeft 함수 사용하기

____foldLeft 함수로 toUpper 함수 작성하기

____foldRight 함수 만들기

____foldLeft vs. foldRight

5.5 여러 컬렉션 데이터 합치기

____zipWith 함수 만들기

5.6 코틀린 리스트를 사용한 명령형 방식과 함수형 방식 비교

____명령형 방식과 함수형 방식의 기능 비교

____명령형 방식과 함수형 방식의 성능 비교

5.7 게으른 컬렉션 FunStream

____FunList vs. FunStream 선언 방법 비교

____FunList vs. FunStream 성능 비교

____FunStream으로 무한대 값 만들기

5.8 실전 응용

____FunList에 printFunList 함수 추가하기

5.9 마치며

6장 함수형 타입 시스템

6.1 타입 시스템

____타입 시스템의 종류와 특징

____함수형 언어의 정적 타입 시스템

6.2 대수적 데이터 타입

____곱 타입의 예와 한계

____합 타입 사용한 OR 결합

____함수형 프로그래밍에서의 대수적 데이터 타입

6.3 타입의 구성요소

____타입 변수

____값 생성자

____타입 생성자와 타입 매개변수

6.4 행위를 가진 타입 정의하기

____인터페이스 vs. 트레이트 vs. 추상 클래스 vs. 믹스인

____타입 클래스와 타입 클래스의 인스턴스 선언하기

6.5 재귀적 자료구조

6.6 실전 응용

____대수적 합 타입의 장점

6.7 마치며

7장 펑터

7.1 펑터란?

____펑터 선언하기

7.2 메이비 펑터 만들기

7.3 트리 펑터 만들기

7.4 이더 펑터 만들기

7.5 단항 함수 펑터 만들기

7.6 펑터의 법칙

____펑터 제1 법칙

____펑터 제2 법칙

____펑터의 법칙을 만족하지 못하는 펑터 인스턴스의 예

7.7 실전 응용

____매개변수가 한 개 이상인 함수로 매핑하기

7.8 마치며

8장 애플리케이티브 펑터

8.1 애플리케이티브 펑터란?

____애플리케이티브 펑터의 정의

____애플리케이티브 펑터 타입 클래스

8.2 메이비 애플리케이티브 펑터 만들기

____메이비 애플리케이티브 펑터 사용해 보기

____애플리케이티브 스타일

____확장 함수를 사용한 메이비 애플리케이티브 펑터 만들기

8.3 트리 애플리케이티브 펑터 만들기

____일반 트리 펑터 만들기

____애플리케이티브 펑터로 확장하기

8.4 이더 애플리케이티브 펑터 만들기

8.5 애플리케이티브 펑터의 법칙

____항등(Identity) 법칙

____합성(Composition) 법칙

____준동형 사상(Homomorphism) 법칙

____교환(Interchange) 법칙

____펑터와 애플리케이티브 펑터 간의 관계

8.6 실전 응용

____liftA2 함수 만들기

____sequenceA 함수 만들기

8.7 마치며

9장 모노이드

9.1 모노이드란?

9.2 모노이드 타입 클래스

____간단한 모노이드 타입 클래스 선언

____모노이드의 법칙

____mconcat 함수 만들기

9.3 메이비 모노이드 만들기

____메이비 모노이드 검증하기

9.4 폴더블 바이너리 트리에 foldMap 함수 만들기

____foldMap 함수

____폴더블 바이너리 트리 만들기

9.5 실전 응용

____바이너리 트리 내에 특정 값이 존재하는지 확인하기

____foldMap을 사용하여 바이너리 트리를 리스트로 바꾸기

9.6 마치며

10장 모나드

10.1 모나드 타입 클래스

10.2 메이비 모나드

____메이비 모나드 활용

10.3 모나드 법칙

____왼쪽 항등(left identity) 법칙

____오른쪽 항등(right identity) 법칙

____결합(associativity) 법칙

____함수 합성 관점에서의 모나드 법칙

10.4 IO 모나드

____입출력 작업이 외부와 분리되지 않은 예

____입출력 작업이 외부와 분리된 예

10.5 리스트 모나드

____FunList 기본 골격 선언하기

____리스트 생성 함수 및 출력 함수 만들기

____리스트 모노이드로 만들기

____fmap 함수 구현하기

____pure와 apply 함수 구현하기

____flatMap 함수 구현하기

10.6 실전 응용

____리스트 생성하기

____두 리스트의 모든 조합의 튜플 리스트 만들기

____리스트의 문자를 대문자로 변환하기

____리스트의 값에 함수 적용하기

____중복 문자 제거하기

____리스트 구성요소 뒤집기

10.7 마치며

11장 로깅, 예외처리, 테스팅, 디버깅

11.1 함수형 프로그래밍에서 로깅하기

____명령형 프로그래밍에서의 로깅

____함수형 프로그래밍에서의 로깅

____확장 함수를 사용해서 개선하기

____라이터 모나드 만들기

11.2 함수형 프로그래밍에서 예외처리하기

____널값이나 -1을 사용한 예외처리

____메이비 모나드를 사용한 예외처리

____이더 모나드를 사용한 예외처리

____트라이 모나드를 사용한 예외처리

11.3 함수형 프로그래밍에서 테스팅하기

____테스트하기 좋은 코드 만들기

____순수한 함수 테스트하기

____부수효과가 존재하는 함수 테스트하기

11.4 함수형 프로그래밍에서 디버깅하기

____디버깅 팁과 도구

____인텔리제이를 활용한 리스트 체인 디버깅

____인텔리제이를 활용한 시퀀스 체인 디버깅

11.5 마치며

출판사

This post is licensed under CC BY 4.0 by the author.

클린 코드

클린 코드 - 1장 깨끗한 코드