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
140
Flow 느껴보기
- KotlinConf'23 Global in SongDo 발표 자료 입니다.
- 2023년 5월 13일
DavidKwon7
May 13, 2023
Tweet
Share
More Decks by DavidKwon7
See All by DavidKwon7
Android는 어떻게 화면을 그릴까?
davidkwon7
0
120
Jetpack Glance
davidkwon7
0
150
Refactoring to Expressive Kotlin
davidkwon7
0
660
UI Test with Compose
davidkwon7
0
170
Relay_및_Compose를_사용하여_완전한_앱_빌드하기.pdf
davidkwon7
0
550
WearOS 101
davidkwon7
0
67
Other Decks in Programming
See All in Programming
AIプログラマーDevinは PHPerの夢を見るか?
shinyasaita
1
190
NPOでのDevinの活用
codeforeveryone
0
700
High-Level Programming Languages in AI Era -Human Thought and Mind-
hayat01sh1da
PRO
0
690
GitHub Copilot and GitHub Codespaces Hands-on
ymd65536
1
140
#kanrk08 / 公開版 PicoRubyとマイコンでの自作トレーニング計測装置を用いたワークアウトの理想と現実
bash0c7
1
670
すべてのコンテキストを、 ユーザー価値に変える
applism118
2
1.1k
CursorはMCPを使った方が良いぞ
taigakono
1
220
既存デザインを変更せずにタップ領域を広げる方法
tahia910
1
270
Systèmes distribués, pour le meilleur et pour le pire - BreizhCamp 2025 - Conférence
slecache
0
120
スタートアップの急成長を支えるプラットフォームエンジニアリングと組織戦略
sutochin26
0
320
アンドパッドの Go 勉強会「 gopher 会」とその内容の紹介
andpad
0
290
データの民主化を支える、透明性のあるデータ利活用への挑戦 2025-06-25 Database Engineering Meetup#7
y_ken
0
340
Featured
See All Featured
Six Lessons from altMBA
skipperchong
28
3.9k
Documentation Writing (for coders)
carmenintech
72
4.9k
The Language of Interfaces
destraynor
158
25k
Making Projects Easy
brettharned
116
6.3k
What's in a price? How to price your products and services
michaelherold
246
12k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
2.9k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
48
5.4k
Optimising Largest Contentful Paint
csswizardry
37
3.3k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
48
2.9k
Code Reviewing Like a Champion
maltzj
524
40k
Code Review Best Practice
trishagee
69
18k
Docker and Python
trallard
44
3.5k
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 코드를 이용해주세요!
감사합니다