코틀린 코루틴 리액티브 프로그래밍: Flow와 Channel

코틀린 코루틴 리액티브 프로그래밍: Flow와 Channel

$36.00
Description
이 책은 전작 『코틀린 코루틴의 정석』에 이어, 코루틴의 Flow API를 활용한 리액티브 프로그래밍과 Channel을 활용한 코루틴 간 통신을 기초부터 심화까지 체계적으로 다룬다.
풍부한 시각화 자료와 실행 가능한 예제 코드를 통해 동작 원리를 직관적으로 이해할 수 있도록 구성했으며, 안드로이드, 스프링 등 코틀린을 사용하는 개발자 분들 중 Flow와 Channel을 기초부터 심화까지 제대로 배워보고 싶은 독자들에게 추천한다.
저자

조세영

취미로시작한안드로이드개발에매료돼안드로이드개발자의길을걷게됐습니다.하이퍼커넥트에서커리어를시작한뒤,라인플러스에서전세계수억명이사용하는라인안드로이드앱개발을담당했습니다.현재는쿠팡에서StaffSoftwareEngineer로일하며광고도메인의여러문제를기술적으로풀어내고있습니다.
소프트웨어개발을공부하며스스로어려움을겪었던부분들을더쉽게풀어설명하고싶다는마음에‘조세영의KotlinWorld’기술블로그를운영하고있습니다(https://kotlinworld.com/).지금까지500개가넘는글을발행했으며,누적방문자수는150만명에이르고있습니다.
블로그운영뿐아니라기술생태계확장을위한여러활동도이어가고있습니다.코루틴관련기술문서를번역해웹에공개했으며,ComposeDynamicTheme,FilledSliderCompose같은오픈소스라이브러리를제작·배포해GoogleDevLibrary에도소개된바있습니다.

목차

1장개발환경설정
1.1.인텔리제이아이디어설치및둘러보기
1.1.1.인텔리제이아이디어설치하기
1.2.코틀린프로젝트생성하고화면구성살펴보기
1.2.1.프로젝트생성하기
1.2.2.IDE구성살펴보기
1.3.첫Flow만들고수집하기
1.3.1.코루틴라이브러리추가하기
1.3.2.첫Flow만들기
1.4.Flow디버깅환경설정하기
1.4.1.실행중인스레드출력하기
1.4.2.실행중인코루틴이름출력하기
1.5.요약

2장리액티브프로그래밍의등장
2.1.복잡해지는애플리케이션
2.2.이전의방식과한계
2.2.1.명령형프로그래밍
2.2.2.명령형프로그래밍의한계
2.3.리액티브프로그래밍의등장
2.3.1.리액티브프로그래밍
2.3.2.비동기메시지통신
2.3.3.리액티브프로그래밍의의의와한계
2.4.리액티브프로그래밍도입전고려해야할사항
2.4.1.가파른학습곡선
2.4.2.높은도입비용
2.5.명령형과리액티브방식의적절한균형의필요성
2.6.요약
코루틴의비동기처리와리액티브프로그래밍의비동기처리
코루틴의FlowAPI와기존의리액티브프로그래밍라이브러리의차이

3장리액티브프로그래밍과코루틴Flow
3.1.리액티브프로그래밍을구성하는핵심개념들
3.1.1.데이터스트림
3.1.2.옵저버패턴
3.1.3.선언형프로그래밍패러다임
3.2.코루틴FlowAPI의구성요소
3.2.1.Flow빌더사용해데이터방출하기
3.2.2.터미널연산자사용해데이터수집해처리하기
3.2.3.중간연산자와선언형프로그래밍
3.2.4.전체과정정리
3.3.요약
리액티브스트림의등장
리액티브스트림과코루틴Flow

4장Flow빌더
4.1.Flow빌더로Flow만들기
4.1.1.flow함수
4.1.2.flowOf함수
4.1.3.asFlow함수
4.1.4.람다식에대한asFlow함수
4.2.Flow인터페이스구현해Flow생성하기
4.3.Flow의실행컨텍스트확인하고전환하기
4.3.1.Flow가동작하는방식
4.3.2.flowOn함수사용해업스트림의실행컨텍스트전환하기
4.4.flowOn함수심화
4.4.1.CoroutineDispatcher가변경될때만새로운코루틴이생성된다
4.4.2.새롭게생성된코루틴은기존의코루틴과구조화된다
4.4.3.flowOn의인자로Job을넘기면안된다
4.5.요약

5장중간연산자
5.1.변환연산자
5.1.1.map함수사용해데이터변환하기
5.1.2.map함수의사용
5.1.3.map함수직접만들어보기
5.2.필터연산자
5.2.1.filter함수사용해데이터필터링하기
5.2.2.filterIsInstance함수로특정타입의데이터만필터링하기
5.2.3.filter함수의사용
5.2.4.filter함수직접만들어보기
5.3.중복제거연산자
5.3.1.distinctUntilChanged함수사용해중복제거하기
5.3.2.distinctUntilChanged의사용
5.3.3.distinctUntilChanged함수직접구현해보기
5.4.take,drop연산자
5.4.1.take함수
5.4.2.drop함수
5.5.-notNull연산자
5.5.1.mapNotNull함수
5.5.2.filterNotNull함수
5.6.중간연산자의동작
5.6.1.중간연산자의실제동작방식
5.6.2.지연실행되는중간연산자
5.7.요약

6장터미널연산자
6.1.collect일시중단함수사용해Flow에서방출된원소처리하기
6.1.1.collect일시중단함수
6.1.2.collect일시중단함수사용시주의할점
6.1.3.collectIndexed일시중단함수
6.2.first일시중단함수사용해첫값가져오기
6.2.1.first일시중단함수
6.2.2.first일시중단함수사용시주의할점
6.2.3.firstOrNull일시중단함수
6.3.last일시중단함수사용해마지막값가져오기
6.3.1.last일시중단함수
6.3.2.lastOrNull일시중단함수
6.4.수집된값을컬렉션으로만드는함수
6.4.1.toList일시중단함수
6.4.2.toSet일시중단함수
6.4.3.toCollection일시중단함수
6.5.누적계산을통해하나의값을반환하는함수
6.5.1.reduce일시중단함수
6.5.2.fold일시중단함수
6.6.원소의총개수를반환하는함수
6.6.1.count일시중단함수
6.6.2.count일시중단함수사용해특정조건을만족하는원소의개수구하기
6.7.터미널연산자사용시주의할점
6.8.요약

7장Flow의이해
7.1.Flow의동작원리
7.1.1.추상화에감춰진Flow의동작원리
7.1.2.Flow동작원리이해하기
7.2.Flow의특징
7.2.1.collect일시중단함수가호출돼야데이터생성과방출이시작된다
7.2.2.동일한코루틴내에서방출과수집이이뤄지면Flow의방출과수집은순차적으로실행된다
7.3.생산자코루틴과소비자코루틴분리하기
7.3.1.flowOn함수사용해생산자코루틴과소비자코루틴분리하기
7.3.2.버퍼통해방출된원소저장하기
7.3.3.buffer함수사용해생산자코루틴과소비자코루틴분리하기
7.3.4.buffer함수사용시주의할점
7.4.Flow의완료
7.4.1.Flow의완료시점이해하기
7.4.2.무한히방출되는Flow에collect를호출하면다음라인의코드가실행되지않는다
7.5.Flow의컨텍스트보존
7.6.flow함수의컨텍스트변경제한
7.7.SafeFlow와unsafeFlow
7.8.요약

8장Flow취소
8.1.Flow취소하기
8.2.flow함수의취소확인
8.3.취소확인지점이없는Flow의취소확인
8.3.1.flowOf,asFlow함수를통해만들어지는Flow의문제
8.3.2.취소확인지점넣어취소확인되게만들기
8.3.3.cancellable함수사용해취소확인하도록만들기
8.4.요약

9장Flow예외처리
9.1.try-catch문을사용한Flow예외처리
9.1.1.try-catch문으로collect호출부감싸예외처리하기
9.1.2.중간연산자에서데이터처리시발생하는예외처리
9.1.3.try-catch문의동작을handleException중간연산자로만들어보기
9.1.4.예외투명성을위반하는handleException함수
9.2.catch함수를사용한Flow예외처리
9.2.1.catch함수사용해예외처리하기
9.2.2.catch함수에서예외를처리한후다시전파하기
9.2.3.catch함수가다운스트림에서발생한예외를구분하는방법
9.3.retry함수를통해예외발생시재시도하기
9.3.1.retry함수
9.3.2.retryWhen함수
9.4.요약

10장생명주기연산자
10.1.onStart함수
10.2.onCompletion함수
10.2.1.onCompletion함수사용해Flow가완료된후에실행될동작정의하기
10.2.2.onCompletion함수사용해Flow가취소됐을때실행될동작정의하기
10.3.onEach함수
10.4.onEmpty함수
10.4.1.onEmpty사용해방출될원소가없을때동작정의하기
10.4.2.onEmpty함수의람다식에서값방출하기
10.5.launchIn함수
10.5.1.onEach함수와함께사용하기
10.5.2.코루틴을생성하는launchIn함수
10.6.요약

11장배압
11.1.배압처리가필요한경우이해하기
11.1.1.배압처리가필요하지않은경우
11.1.2.배압처리가필요한경우
11.2.collectLatest일시중단함수를활용한배압처리
11.2.1.collectLatest일시중단함수사용해배압처리하기
11.2.2.collectLatest일시중단함수의동작원리
11.2.3.collectLatest일시중단함수를사용한배압처리의한계
11.3.conflate함수를활용한배압처리
11.3.1.conflate함수의동작방식
11.3.2.코루틴을분리하는conflate함수
11.4.buffer함수를사용한배압처리
11.4.1.buffer함수의기본동작
11.4.2.capacity사용해버퍼크기설정하기
11.4.3.onBufferOverflow사용해버퍼가가득찼을때실행전략설정하기
11.5.요약


12장결합연산자
12.1.zip함수
12.1.1.zip함수사용해Flow결합하기
12.1.2.zip함수의동작방식
12.1.3.zip함수의완료
12.2.combine함수
12.2.1.combine함수사용해Flow결합하기
12.2.2.여러개의Flow결합하기
12.2.3.combine함수의완료
12.3.요약

13장평탄화연산자
13.1.평탄화이해하기
13.1.1.평탄화가필요한경우
13.1.2.평탄화연산자사용하지않고평탄화해보기
13.2.flattenConcat함수와flatMapConcat함수
13.2.1.flattenConcat함수
13.2.2.flatMapConcat함수
13.2.3.flattenConcat,flatMapConcat함수의한계
13.3.flatMapMerge함수
13.3.1.flatMapMerge함수의동작방식
13.3.2.flatMapMerge가동시에실행할수있는작업수제한하기
13.4.flatMapLatest연산자
13.5.요약

14장차가운Flow와뜨거운Flow
14.1.차가운Flow와뜨거운Flow
14.1.1.차가운Flow
14.1.2.뜨거운Flow
14.2.SharedFlow
14.2.1.SharedFlow의개념과기본동작
14.2.2.SharedFlow만들고데이터방출하기
14.2.3.replayCache사용해collec

출판사 서평

◈이책에서다루는내용◈

◆명령형프로그래밍의한계와리액티브프로그래밍의등장배경을설명하고,코틀린의FlowAPI가기존리액티브라이브러리와어떤차별점을갖는지소개한다.
◆Flow를생성하는방법부터다양한중간연산자와터미널연산자의활용방식을배우고,Flow의취소,Flow의예외처리,Flow의결합까지다뤄기초를탄탄히다질수있도록한다.
◆데이터생산속도와소비속도간불균형이발생했을때Flow의배압처리를통해시스템을안정적으로유지하는방법을설명한다.
◆차가운Flow와뜨거운Flow의개념을다룬다.차가운Flow만을사용할때발생하는문제에대해알아보고이를뜨거운Flow를통해어떻게해결할수있는지를알아본다.
◆Flow를테스트하는방법을기초부터심화까지알아본다.
◆Channel을활용해코루틴간에데이터를주고받는방법을알아본다.