함수형 코틀린 [코틀린과 애로우로 배우는 함수형 프로그래밍]
- 원서명Functional Kotlin: Extend your OOP skills and implement Functional techniques in Kotlin and Arrow (ISBN 9781788476485)
- 지은이마리오 아리아스(Mario Arias), 리부 카크라보티(Rivu Chakraborty)
- 옮긴이구진수
- ISBN : 9791161752631
- 30,000원
- 2019년 01월 31일 펴냄
- 페이퍼백 | 416쪽 | 188*235mm
- 시리즈 : acorn+PACKT, 프로그래밍 언어
책 소개
소스 코드 파일은 여기에서 내려 받으실 수 있습니다.
본문에 쓰인 컬러 이미지는 여기에서 내려 받으세요.
요약
간단한 예제를 통해 코틀린의 여러 가지 특징을 쉽게 살펴볼 수 있도록 구성된 책이다. 다른 언어에서 접해보지 못한, 혹은 접해봤지만 코틀린에서 약간 다르게 동작하는 것들을 알게 될 것이다. 이 책을 읽고 나면 코틀린의 기본에 대해 깨우치고 스스로 코틀린 프로그래밍을 헤쳐나갈 수 있는 기초를 다질 수 있다.
이 책에서 다루는 내용
■ 코틀린으로 함수형 프로그래밍 컨셉 배우기
■ 코틀린 코루틴 다루기
■ 애로우 라이브러리 사용하기
■ 모나드, 펑터, 어플리커티브에 대해 배우기
■ 함수형 프로그래밍을 OOP와 리액티브 프로그래밍과 결합하기
■ 애로우와 함께 모나드 사용하기
■ 스트림 처리하기
이 책의 대상 독자
이 책은 코틀린의 기본을 알고 있으면서 함수형 프로그래밍 이면의 기본 아이디어를 이해하고 실용적으로 사용하는 방법을 알고 싶은 코틀린 유저(프로그래머, 엔지니어, 라이브러리 작성자, 아키텍트)를 위한 것이다. 부록에서 코틀린 언어를 빠르게 시작하는 방법을 제공한다. 코틀린을 처음 접하는 독자라면 부록 먼저 보기를 권한다.
이 책의 구성
1장, '코틀린: 데이터 타입, 오브젝트, 클래스'에서는 코틀린의 객체지향 프로그래밍에 대해 소개한다. 코틀린은 기본적으로 객체지향 프로그래밍이며, 함수형 프로그래밍 스타일을 소개하기 위해 이러한 기능을 사용한다.
2장, '함수형 프로그래밍 시작'에서는 코틀린의 객체지향 프로그래밍 기능을 사용해 함수형 프로그래밍의 기본 원칙을 다룬다.
3장, '불변성: 중요’에서는 불변성을 함수형 프로그래밍의 가장 중요한 개념 중 하나라고 강조한다. 그리고 불변성에 대해 심층적으로 이해할 수 있게 돕는다.
4장, '함수, 함수 타입, 부수 효과'에서는 함수, 순수 함수에 대한 컨셉과 다양한 함수 타입 및 부수 효과에 대한 기본적인 함수형 프로그래밍 컨셉을 소개한다.
5장, '함수 심화 학습'에서는 확장 함수, 연산자 오버로딩, DSL, 코리커젼 같은 함수형 프로그래밍을 위한 코틀린의 기능을 다룬다.
6장, '코틀린의 델리게이트'에서는 델리게이트를 위해 코틀린이 언어 레벨에서 지원하는 방법을 다룬다. 델리게이트는 객체지향 프로그래밍 컨셉이지만 코드를 모듈화하는데 도움이 될 수 있다.
7장, '코루틴을 사용한 비동기 프로그래밍'에서는 코틀린에서의 비동기 프로그래밍을 소개하고, 코루틴과 다른 스타일을 비교한다.
8장, '코틀린의 컬렉션과 데이터 작업'에서는 코틀린의 향상된 컬렉션 API와 코틀린의 컬렉션 프레임워크가 제공하는 함수형 인터페이스에 대해 다룬다.
9장, '함수형 프로그래밍과 리액티브 프로그래밍'에서는 최대한의 이득을 얻기 위해 함수형 프로그래밍이 다른 프로그래밍 패러타임과 결합하는 방법을 보여준다. 또한 함수형 프로그래밍과 객체지향 프로그래밍 및 리액티브 프로그래밍의 결합 방법을 알아 본다.
10장, '펑터, 어플리커티브, 모나드'에서는 타입을 가진 함수형 프로그래밍과 그 기본 컨셉을 소개한다. 또한 코틀린에서 구현하는 방법을 설명한다.
11장, '코틀린에서 스트림 작업'에서는 코틀린의 스트림 API을 소개한다.
12장, '애로우 시작'에서는 애로우 사용법과 함수형 프로그래밍을 위한 확장, 함수 합성, 커링, 부분 애플리케이션, 메모이제이션, 옵틱스를 다룬다.
13장, '애로우 타입'에서는 Option, Either, Try 같은 애로우 데이터 타입과 State 및 타입 클래스, 펑터, 모나드를 이해하게 돕는다.
부록, '코틀린 퀵 스타트'에서는 코틀린 코드 작성을 시작하는 데 필요한 도구, 기본 구문 등과 코틀린 여행을 진행하는 데 도움이 되는 다른 리소스를 제공한다.
목차
목차
- 1장. 코틀린: 데이터 타입, 오브젝트, 클래스
- 클래스
- 속성
- 메소드
- 상속
- 추상 클래스
- 인터페이스
- 오브젝트
- 오브젝트 선언
- 컴패니언 오브젝트
- 제네릭
- 타입 앨리어스
- Nullable 타입
- null 확인
- null이 아닌 타입 확인
- 안전 호출
- 엘비스(?:) 연산자
- (!!) 연산자
- 코틀린의 타입 시스템
- Any 타입
- 최소 공통 타입
- Unit 타입
- Nothing 타입
- 기타 타입
- 데이터 클래스
- 주석
- 열거형
- 정리
- 클래스
- 2장. 함수형 프로그래밍 시작
- 함수형 프로그래밍이란?
- 기본 개념
- 일급 함수 및 고차 함수
- 순수 함수
- 재귀 함수
- 느긋한 계산법
- 함수적 컬렉션
- 함수형 리스트 구현
- 정리
- 3장. 불변성: 중요
- 불변성이란?
- 코틀린에서 불변성 구현
- var와 val의 차이
- 컴파일 타임 상수
- 불변성의 종류
- 불변 컬렉션
- 불변성의 장점
- 스레드 안전성
- 낮은 커플링
- 참조 투명성
- 실패 원자성
- 캐싱
- 컴파일러 최적화
- 순수 함수
- 불변성의 단점
- 정리
- 불변성이란?
- 4장. 함수, 함수 타입, 부수 효과
- 코틀린의 함수
- 함수에서 두 개의 값 반환
- 확장 함수
- 기본 인수
- 중첩 함수
- 함수형 프로그래밍에서의 함수 타입
- 람다
- 속성으로서의 함수
- 고차 함수
- 순수 함수와 부수 효과
- 부수 효과
- 순수 함수
- 정리
- 코틀린의 함수
- 5장. 함수 심화 학습
- 단일 표현 함수
- 파라미터
- 수정자 vararg
- 람다
- 명명된 파라미터
- 기본 파라미터
- 확장 함수
- 확장 함수와 상속
- 충돌하는 이름을 가진 확장 함수
- 오브젝트용 확장 함수
- 중위 함수
- 연산자 오버로딩
- 바이너리 연산자
- Invoke
- 인덱싱된 접근
- Unary 연산자
- 타입 안전 빌더
- DSL 생성
- 인라인 함수
- 인라인 제한
- 재귀 및 코리커젼
- 정리
- 6장. 코틀린의 델리게이트
- 위임 소개
- 위임의 이해
- 코틀린의 델리게이트
- 속성 위임(표준 델리게이트)
- Delegates.notNull 함수와 lateinit
- 느긋한 함수
- Delegates.Observable를 사용해 속성 값 변경 관찰
- 거부의 힘: Delegates.vetoable
- 위임된 맵
- 커스텀 위임
- 로컬 델리게이트
- 클래스 위임
- 정리
- 위임 소개
- 7장. 코틀린을 사용한 비동기 프로그래밍
- 코루틴 소개
- JVM 스레드 이해
- Hell, coroutine world!
- 실제 코루틴 사용
- 동기 구현
- 콜백
- 자바 퓨처
- 코버넌트를 통한 프로미스
- 코루틴
- 코루틴 컨텍스트
- 채널
- 채널 파이프라인
- 변경 가능한 상태 관리
- 컨텍스트 전환
- 스레드 안전 구조체
- 뮤텍스
- 액터
- 정리
- 코루틴 소개
- 8장. 코틀린의 컬렉션과 데이터 작업
- 컬렉션 소개
- 컬렉션 프레임워크의 장점
- List와 MutableList
- Set과 MutableSet
- Map과 MutableMap
- 컬렉션의 데이터 작업
- map 함수
- filter 함수
- flatMap 함수
- drop 함수
- take 함수
- zip 함수
- 컬렉션 그룹화
- 정리
- 컬렉션 소개
- 9장. 함수형 프로그래밍과 리액티브 프로그래밍
- FP와 OOP 결합
- 함수형 리액티브 프로그래밍
- 리액티브 매니페스토
- 코틀린의 함수형 리액티브 프레임워크
- RxKotlin 시작
- RxKotlin 다운로드 및 설정
- RxJava 푸시 메커니즘과 풀 메커니즘 비교
- Observables
- Observable의 작동 방식
- Observable.create 메소드
- Observable.from 메소드
- Iterator<T>.toObservable
- Subscriber: Observer 인터페이스
- 구독 및 폐기
- 정리
- 10장. 펑터, 어플리커티브, 모나드
- 펑터
- 모나드
- 어플리커티브
- 정리
- 11장. 코틀린에서 스트림 작업
- 스트림 소개
- 컬렉션과 스트림
- 스트림 작업
- 프리미티브 스트림
- 스트림 팩토리 메소드
- 스트림 빌더
- 빈 스트림 생성: Stream.empty()
- 요소를 전달해 스트림 만들기: Stream.of()
- 스트림 생성: Stream.generate()
- 컬렉터와 Stream.collect: 스트림 수집
- Collectors.toList(), Collectors.toSet(), Collectors.toCollection()
- 맵에 수집: Collectors.toMap()
- 문자열 스트림의 결합: Collectors.joining()
- 스트림 요소 그룹화: Collectors.groupingBy()
- 정리
- 12장. 애로우 시작
- 함수 합성
- 부분 애플리케이션
- 바인딩
- 리버스
- 파이프
- 커링
- 커링과 부분 애플리케이션의 차이점
- 논리 부정
- 메모이제이션
- 부분 함수
- 항등과 상수
- 옵틱스
- 애로우 코드 생성 설정
- 렌즈 생성
- 정리
- 13장. 애로우 타입
- Option
- 애로우의 타입 계층
- Either
- 모나드 트랜스포머
- Try
- State
- State가 있는 코리커젼
- 정리
- 부록. 코틀린 퀵 스타트
- 코틀린 작성 및 실행
- 코틀린 온라인
- 콘솔에서 하기
- 그래들 사용
- IntelliJ IDEA나 안드로이드 스튜디오 사용
- 기본 코틀린 구문
- 일반 기능
- 제어 구조
- 코틀린 Koans
- 코틀린 작성 및 실행