FREE SHIPING FOR OVER $100 - MOSTLY SHIP VIA USPS GROUND ADVANTAGE %D days %H:%M:%S
조세영
저자:조세영 취미로안드로이드개발을시작했다가빠져들어안드로이드개발자가됐다.하이퍼커넥트에서안드로이드개발자로서커리어를시작했고,현재는라인플러스에서라인안드로이드앱을개발하고있다. 안드로이드개발을하면서어려움을느낀부분들을다른사람들과공유하고싶어‘조세영의KotlinWorld’기술블로그를운영하며400개이상의글을발행했다. 블로그운영외에도기술과관련된다양한활동을하고있다.코루틴기술문서를번역해웹에배포하기도했고,ComposeDynamicTheme이나FilledSliderCompose같은오픈소스라이브러리를만들어배포해GoogleDevLibrary에소개되기도했다. 경력 현)라인플러스안드로이드개발자 전)하이퍼커넥트안드로이드개발자 전)티맥스데이터연구원 전)인공위성연구소대학원생연구원 학력 KAIST전기및전자공학부석사 고려대학교전기전자전파공학부학사 고려대학교보건정책관리학부학사 인천외국어고등학교졸업
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장리액티브프로그래밍과코루틴Flow3.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.요약리액티브스트림의등장리액티브스트림과코루틴Flow4장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와unsafeFlow7.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와뜨거운Flow14.1.차가운Flow와뜨거운Flow14.1.1.차가운Flow14.1.2.뜨거운Flow14.2.SharedFlow14.2.1.SharedFlow의개념과기본동작14.2.2.SharedFlow만들고데이터방출하기14.2.3.replayCache사용해collec
이책에서다루는내용명령형프로그래밍의한계와리액티브프로그래밍의등장배경을설명하고,코틀린의FlowAPI가기존리액티브라이브러리와어떤차별점을갖는지소개한다.Flow를생성하는방법부터다양한중간연산자와터미널연산자의활용방식을배우고,Flow의취소,Flow의예외처리,Flow의결합까지다뤄기초를탄탄히다질수있도록한다.데이터생산속도와소비속도간불균형이발생했을때Flow의배압처리를통해시스템을안정적으로유지하는방법을설명한다.차가운Flow와뜨거운Flow의개념을다룬다.차가운Flow만을사용할때발생하는문제에대해알아보고이를뜨거운Flow를통해어떻게해결할수있는지를알아본다.Flow를테스트하는방법을기초부터심화까지알아본다.Channel을활용해코루틴간에데이터를주고받는방법을알아본다.저자의말코루틴과일시중단함수를사용하면단일값을비동기적으로반환받을수있다.하지만데이터가시간에따라변하고,이변하는데이터에실시간으로반응해야하는상황이생기면새로운도구가필요해진다.여기서코루틴의Flow가등장한다.Flow는비동기적으로계산된여러값을순차적으로반환받을수있도록설계된코루틴의핵심구성요소로,코루틴기반환경에서리액티브프로그래밍을구현하기위해사용된다.리액티브프로그래밍은데이터흐름을선언적으로표현하는프로그래밍패러다임으로,복잡한데이터흐름을간결하게다룰수있도록한다.이런특성덕분에복잡한데이터흐름을가진현대의애플리케이션들에서리액티브프로그래밍은필수적인요소로자리잡았다.하지만코루틴자체도이해가쉽지않은주제이고,리액티브프로그래밍또한학습곡선이가파르다.Flow는두개념을모두요구하는만큼,학습난이도는매우높은편이다.그럼에도불구하고Flow를다루는학습자료는많지않으며,있더라도독자가리액티브프로그래밍에대한사전이해를갖고있다고가정하는경우가많아진입장벽이높다.이책은더많은개발자들이코루틴Flow에쉽게다가갈수있도록하기위해집필됐다.전작『코틀린코루틴의정석』에서는코루틴자체에대한깊이있는이해를제공했다면,이번책은그기반위에서FlowAPI를활용한리액티브프로그래밍을체계적으로설명한다.Flow의개념과생성방식,Flow에서방출되는데이터를소비하는방법같은기초부터,배압과뜨거운Flow와차가운Flow같은심화주제까지폭넓게다뤄리액티브프로그래밍을깊이있게이해할수있도록구성했다.코틀린과코루틴에대한기본지식만갖추고있다면,누구나이해할수있도록설계된이책을통해더많은개발자들이Flow를친숙하게느끼고실무에자신있게활용하길바란다.