서브메뉴

본문

코틀린으로 배우는 함수형 프로그래밍
코틀린으로 배우는 함수형 프로그래밍
저자 : 조재용|우명인
출판사 : 인사이트
출판년 : 2019
ISBN : 9788966262557

책소개

차세대 언어 코틀린을 이용해
실전에서 활용할 수 있는 함수형 코드를 설계한다!

어렵게만 느껴지는 함수형 개념을 충실히 설명하여, 실전에서 활용할 수 있는 지식이 될 수 있도록 한 책이다. 다양한 모범 예제를 보여주며, 배운 내용을 바로 활용해 볼 수 있는 실전응용 문제를 제시해 함수형 프로그래밍을 체득할 수 있게 해 준다.
이 책은 함수형 프로그래밍을 멀티 패러다임 언어인 코틀린으로 다룬다. 따라서 순수 함수형이 아닌 언어로 함수형 프로그래밍을 할 때의 시행착오와 대처법도 다루는데, 순수 함수형 언어를 실전에서 쓰는 경우가 드문 점을 감안하면 실질적으로 많은 도움이 될 것이다.
코틀린은 함수적 특징과 함께 객체지향 프로그래밍도 가능하도록 설계되어 있기 때문에 필요에 따라 명령형ㆍ 객체지향형ㆍ 함수형 예제를 비교하며 보였다.
또한 언어가 제공하는 함수적인 기능을 단순히 사용해 보는 것을 넘어 고차 함수, 함수적 자료구조, 타입 등을 직접 만들어 볼 수 있게 구성하였으므로, 함수형 라이브러리를 만들어서 제공할 수 있는 수준까지 전진할 수 있을 것이다.
[교보문고에서 제공한 정보입니다.]

출판사 서평

차세대 언어 코틀린을 이용해

실전에서 활용할 수 있는 함수형 코드를 설계한다!



어렵게만 느껴지는 함수형 개념을 충실히 설명하여, 실전에서 활용할 수 있는 지식이 될 수 있도록 한 책이다. 다양한 모범 예제를 보여주며, 배운 내용을 바로 활용해 볼 수 있는 실전응용 문제를 제시해 함수형 프로그래밍을 체득할 수 있게 해 준다.

이 책은 함수형 프로그래밍을 멀티 패러다임 언어인 코틀린으로 다룬다. 따라서 순수 함수형이 아닌 언어로 함수형 프로그래밍을 할 때의 시행착오와 대처법도 다루는데, 순수 함수형 언어를 실전에서 쓰는 경우가 드문 점을 감안하면 실질적으로 많은 도움이 될 것이다.

코틀린은 함수적 특징과 함께 객체지향 프로그래밍도 가능하도록 설계되어 있기 때문에 필요에 따라 명령형?객체지향형?함수형 예제를 비교하며 보였다.

또한 언어가 제공하는 함수적인 기능을 단순히 사용해 보는 것을 넘어 고차 함수, 함수적 자료구조, 타입 등을 직접 만들어 볼 수 있게 구성하였으므로, 함수형 라이브러리를 만들어서 제공할 수 있는 수준까지 전진할 수 있을 것이다.
[알라딘에서 제공한 정보입니다.]

목차정보

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

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

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

____동일 입력 동일 출력

____부수효과 없는 코드

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

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

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

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

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

____참조 투명하지 않은 함수

____참조 투명한 함수

1.5 일급 함수란?

____일급 객체(first-class object)

____일급 함수(first-class function)

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

____간단한 계산기 예제

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

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

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

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

1.8 마치며

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

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 마치며
[알라딘에서 제공한 정보입니다.]