Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Flow 느껴보기
Search
DavidKwon7
May 13, 2023
Programming
1
110
Flow 느껴보기
- KotlinConf'23 Global in SongDo 발표 자료 입니다.
- 2023년 5월 13일
DavidKwon7
May 13, 2023
Tweet
Share
More Decks by DavidKwon7
See All by DavidKwon7
Jetpack Glance
davidkwon7
0
100
Refactoring to Expressive Kotlin
davidkwon7
0
550
UI Test with Compose
davidkwon7
0
130
Relay_및_Compose를_사용하여_완전한_앱_빌드하기.pdf
davidkwon7
0
420
WearOS 101
davidkwon7
0
36
Other Decks in Programming
See All in Programming
ふかぼれ!CSSセレクターモジュール / Fukabore! CSS Selectors Module
petamoriken
0
120
リリース8年目のサービスの1800個のERBファイルをViewComponentに移行した方法とその結果
katty0324
5
4.2k
とにかくAWS GameDay!AWSは世界の共通言語! / Anyway, AWS GameDay! AWS is the world's lingua franca!
seike460
PRO
1
780
GitHub Actionsのキャッシュと手を挙げることの大切さとそれに必要なこと
satoshi256kbyte
5
420
Amazon Bedrock Agentsを用いてアプリ開発してみた!
har1101
0
300
Better Code Design in PHP
afilina
PRO
0
110
役立つログに取り組もう
irof
28
9.3k
Outline View in SwiftUI
1024jp
1
290
C++でシェーダを書く
fadis
6
3.9k
Ethereum_.pdf
nekomatu
0
370
プロジェクト新規参入者のリードタイム短縮の観点から見る、品質の高いコードとアーキテクチャを保つメリット
d_endo
1
1.1k
Macとオーディオ再生 2024/11/02
yusukeito
0
330
Featured
See All Featured
Speed Design
sergeychernyshev
24
600
Build The Right Thing And Hit Your Dates
maggiecrowley
33
2.4k
Optimising Largest Contentful Paint
csswizardry
33
2.9k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
42
2.2k
Designing for humans not robots
tammielis
249
25k
Rebuilding a faster, lazier Slack
samanthasiow
79
8.7k
A Philosophy of Restraint
colly
203
16k
Typedesign – Prime Four
hannesfritz
40
2.4k
Building Applications with DynamoDB
mza
90
6.1k
Why Our Code Smells
bkeepers
PRO
334
57k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
43
6.8k
Bash Introduction
62gerente
608
210k
Transcript
Flow 느껴보기 - kotlinConf 2023
권혁준 Android Developer GDG Incheon Organizer 스파이더 크래프트 Android Developer
목차 1. Coroutine Flow 소개 2. Flow Operator 3. StateFlow
/ SharedFlow (kotlinConf recap) 4. Flow with compose (kotlinConf recap)
Coroutine Flow 소개
Flow는 무엇일까요?
Coroutine Flow 소개
Coroutine Flow 소개
Coroutine Flow 소개 비동기적으로 처리되는 데이터 스트림 생성 및 처리
앱의 반응성 유지 데이터를 생산 (emit)하는 오퍼레이터와 소비(collect) 하는 오퍼레이터 비동기 코드를 동기적인 코드처럼 작성할 수 있다 데이터를 비동기적으로 처리하고 UI를 업데이트 하는 등의 활용 오퍼레이터를 연결하여 데이터 파이프라인 생성
Coroutine Flow 소개 데이터 스트림 생산 및 소비를 하는 경량화된
비동기 스레드.
Coroutine Flow 소개 안드로이드 공식문서에서는 flow를 ‘여러 값을 순차적으로 내보낼
수 있는 유형’ 이라고 소개하고 있습니다. - 생산자 : 스트림에 추가되는 데이터 생산 - 중개자(선택사항) : 값이나 스트림 자체 수정 - 소비자 : 스트림 사용
Coroutine Flow 소개
None
None
scope / builder 소개
Coroutine Flow 소개 Flow는 비동기적으로 처리되는 스트림 형태의 데이터로 ‘생산자
/ 중개자 / 소비자’ 의 형태로 파이프 라인을 형성하여 효율적으로 데이터 처리 및 반응형 UI를 생성할 수 있다.
Operator of Flow
Operator of Flow - merge merge를 사용하여, 2개 이상의 스트림을
하나의 스트림으로 합쳐줄 수 있습니다. 2개의 스트림이 나누어진 상태에서 합쳐지는 것이 아닌, 시간의 흐름에 따라 정렬되는 형식을 취합니다.
Operator of Flow - merge suspend fun main() { val
ints: Flow<Int> = flowOf(1, 2, 3).onEach { delay(100) } val doubles: Flow<Double> = flowOf(0.1, 0.2, 0.3).onEach { delay(50) } val together: Flow<Number> = merge(ints, doubles) print(together.toList()) }
Operator of Flow - combine combine을 사용함으로써 2가지 이상의 flow
간의 결합이 가능해지기 때문에, 2가지 이상의 데이터를 효과적으로 처리해줄 수 있습니다.
Operator of Flow - combine combine @JvmName(name = "flowCombine") fun
<T1, T2, R> Flow<T1>.combine (flow: Flow<T2>, transform : suspend (T1, T2) -> R): Flow<R> val flow = flowOf(1, 2).onEach { delay(10) } val flow2 = flowOf("a", "b", "c").onEach { delay(15) } flow.combine(flow2) { i, s -> i.toString() + s }.collect { println(it) // Will print "1a 2a 2b 2c" }
Operator of Flow - zip zip은 combine과 유사한 operator입니다. 차이점은
결합을 하게 되는 경우 발행하는 이벤트의 횟수가 동일하게 맞춰진다는 특징이 존재합니다.
Operator of Flow - zip
Operator of Flow - reduce reduce의 프로퍼티는 accumulator, value 가
존재합니다. accumulate는 누적된 값을 보여주고, value는 이후에 연산이 진행될 값을 보여줍니다.
Operator of Flow - reduce
Operator of Flow - fold fold는 reduce와 유사한 기능을 가지고
있습니다. 동일하게 accumulate, value를 사용합니다. 차이점은 fold의 경우 fold의 파라미터에 처음 연산 값을 넣어줄 수 있다는 것입니다.
Operator of Flow - fold
Operator of Flow - scan scan은 fold와 유사하게 결과값을 누적해주는
기능이 있지만, 리스트 형태로 중간 결과값을 모두 가지고 있다는 특징이 있습니다.
Operator of Flow - scan
Operator of Flow - buffer buffer를 사용함으로써 기존의 발행/소비 패턴과
다르게, 데이터 abc 발행 후 데이터 abc 소비하는 형태로 flow를 변경해줄 수 있습니다.
Operator of Flow - buffer
Operator of Flow - map / filter map을 통해 데이터를
변환할 수 있습니다. filter를 사용하면 조건에 맞는 데이터만 넘겨줄 수 있습니다.
Operator of Flow - map / filter
Operator of Flow - take take 파라미터 안의 수만큼 소비하며
그 이후에 flow는 cancel 됩니다
Operator of Flow - take
Operator of Flow - drop drop을 사용하면 작성된 숫자만큼의 값들의
수를 넘길 수 있습니다.
Operator of Flow - drop
kotlinConf 2023 Recap
SharedFlow / StateFlow KotlinX Libraries Recap!
SharedFlow / StateFlow 상황에 맞춰 다양한 Flow를 사용한 것을 확인할
수 있습니다.
SharedFlow / StateFlow SharedFlow - 수집(collect)하는 모든 소비자에게 값을 보내줄
수 있다. - 처음 값 구독 시작했을 때는 처음 방출 데이터를 갖지 못한다. - 같은 값을 연속적으로 방출하게 되는 경우 두 값 모두 collect한다.
SharedFlow / StateFlow StateFlow - 현재 상태와 새로운 상태 업데이트를
수집기(collector)에 내보내는 역할을 수행할 수 있다. - 처음 구독 시작 시, 처음 방출 데이터를 갖는다. - 같은 값을 연속적으로 방출하게 되는 경우 처음 값만 collect한다.
SharedFlow / StateFlow
SharedFlow / StateFlow
SharedFlow / StateFlow
SharedFlow / StateFlow
Flow / SharedFlow / StateFlow
Flow / SharedFlow / StateFlow Cold Flow : collector가 방출된
데이터를 수집할 때마다 새로운 데이터 스트림 생성하므로 collector들은 각각의 개별적인 데이터 스트림에서 데이터 수집합니다. Hot Flow : collector들이 데이터 스트림을 공유하여 동일한 데이터를 수집하며, 기본적으로 collector가 없어도 데이터 방출합니다. 다수의 구독자가 동일한 스트림을 전달받을 수 있습니다.
Flow / SharedFlow / StateFlow
Flow / SharedFlow / StateFlow
Flow / SharedFlow / StateFlow
SharedFlow / StateFlow
Flow with Compose Avoiding common Coroutines mistakes in compose Recap!
Flow with Compose
Flow with Compose
collectAsState Compose는 value의 변화를 자체적으로 파악하지 못 합니다. 그렇기에 새로운
flow 값의 방출이 일어날 때마다, compose state 형태로 값의 변화를 업데이트를 해준다.
collectAsStateWithLifeCycle collectAsState에 LifeCycle이 더해진 compose api 입니다. 이를 통해 생명
주기에 맞춰 flow를 수집할 수 있게 됩니다.
collectAsState는 lifeCycle에 종속되지 않는다는 장점이 있습니다. 그렇기에 Android 앱이 백그라운드에
있는 동안 recomposition을 중지하더라도, 계속해서 작업을 진행할 수 있기에, 백그라운드 상태에서도 작업을 진행할 수 있습니다.
Flow with Compose
Flow with Compose
Flow with Compose
Flow with Compose
참고 자료 - KotlinConf : https://kotlinconf.com/talks/ - 안드로이드 공식 문서
https://developer.android.com/kotlin/flow?hl=ko
질문은 상단의 QR 코드를 이용해주세요!
감사합니다