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
120
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
130
Refactoring to Expressive Kotlin
davidkwon7
0
600
UI Test with Compose
davidkwon7
0
140
Relay_및_Compose를_사용하여_완전한_앱_빌드하기.pdf
davidkwon7
0
480
WearOS 101
davidkwon7
0
54
Other Decks in Programming
See All in Programming
Bedrock Agentsレスポンス解析によるAgentのOps
licux
3
890
DRFを少しずつ オニオンアーキテクチャに寄せていく DjangoCongress JP 2025
nealle
2
210
Honoとフロントエンドの 型安全性について
yodaka
7
1.4k
『テスト書いた方が開発が早いじゃん』を解き明かす #phpcon_nagoya
o0h
PRO
6
2.2k
『GO』アプリ バックエンドサーバのコスト削減
mot_techtalk
0
150
ML.NETで始める機械学習
ymd65536
0
220
sappoRo.R #12 初心者セッション
kosugitti
0
270
Generating OpenAPI schema from serializers throughout the Rails stack - Kyobashi.rb #5
envek
1
330
責務と認知負荷を整える! 抽象レベルを意識した関心の分離
yahiru
8
1.3k
負債になりにくいCSSをデザイナとつくるには?
fsubal
10
2.5k
pylint custom ruleで始めるレビュー自動化
shogoujiie
0
140
PHP ステートレス VS ステートフル 状態管理と並行性 / php-stateless-stateful
ytake
0
110
Featured
See All Featured
Optimising Largest Contentful Paint
csswizardry
34
3.1k
For a Future-Friendly Web
brad_frost
176
9.6k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.1k
Speed Design
sergeychernyshev
27
800
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
330
21k
Site-Speed That Sticks
csswizardry
4
400
A Tale of Four Properties
chriscoyier
158
23k
We Have a Design System, Now What?
morganepeng
51
7.4k
Building Applications with DynamoDB
mza
93
6.2k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
175
52k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
Adopting Sorbet at Scale
ufuk
74
9.2k
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 코드를 이용해주세요!
감사합니다