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
94
Flow 느껴보기
- KotlinConf'23 Global in SongDo 발표 자료 입니다.
- 2023년 5월 13일
DavidKwon7
May 13, 2023
Tweet
Share
More Decks by DavidKwon7
See All by DavidKwon7
Refactoring to Expressive Kotlin
davidkwon7
0
440
UI Test with Compose
davidkwon7
0
110
Relay_및_Compose를_사용하여_완전한_앱_빌드하기.pdf
davidkwon7
0
320
WearOS 101
davidkwon7
0
19
Other Decks in Programming
See All in Programming
過去や未来を扱うのは難しい? 過去と未来に立ち向かうための勘所
shinpeim
2
450
Gobra で見る形式検証 (mercari.go #26)
artoy
0
440
フレームワークを10年以上開発する中で培ってきた単体テストのプラクティス / JJUG CCC 2024 Spring
kiwasaki
1
120
about #67401 //go:linkname
andpad
2
19k
スクラムフェスを支える配信の仕組み
murabayashi
1
150
CSC307 Lecture 03
javiergs
PRO
0
150
あらゆるアプリをCompose Multiplatformで書きたい! -ネイティブアプリの「あの機能」を私たちはどう作るか-
subroh0508
1
910
ボトムアップではじめるFour Keys・SPACEを用いた開発プロセスの改善事例 〜開発生産性に向き合ってチームの成長を実感する〜
nomuson
1
260
CSC307 Lecture 04
javiergs
PRO
0
210
[Flutter] Unitテストの基礎を理解する
haruki_uiru
0
190
Using Next.js as a full-stack framework / Next.jsをフルスタックフレームワークとして使ってみた
mongolyy
PRO
1
160
どうせキレイに書けない処理は逆にAIに書いてもらうほうが良い説 / #kyotojs 22
potato4d
3
190
Featured
See All Featured
Gamification - CAS2011
davidbonilla
77
4.8k
Building an army of robots
kneath
300
42k
We Have a Design System, Now What?
morganepeng
45
6.9k
Designing for humans not robots
tammielis
247
25k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
247
20k
Building Flexible Design Systems
yeseniaperezcruz
321
37k
Scaling GitHub
holman
457
140k
Stop Working from a Prison Cell
hatefulcrawdad
266
20k
Bootstrapping a Software Product
garrettdimon
PRO
302
110k
What's in a price? How to price your products and services
michaelherold
238
11k
Code Review Best Practice
trishagee
57
16k
Fontdeck: Realign not Redesign
paulrobertlloyd
77
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 코드를 이용해주세요!
감사합니다