728x90
반응형

Android 공부 59

[XX캠퍼스] 16.Kotlin Coroutines & Flow ( 런칭 )

https://dalinaum.github.io/coroutines-example/16 플로우 런칭 플로우 런칭 예제 78: 이벤트를 Flow로 처리하기 addEventListener 대신 플로우의 onEach를 사용할 수 있습니다. 이벤트마다 onEach가 대응하는 것입니다. import kotlinx.coroutines.* import kotlinx.coroutines.flow.* fun e dalinaum.github.io 이벤트를 Flow로 처리하기 addEventListener 대신 플로우의 onEach를 사용할 수 있습니다. 이벤트마다 onEach가 대응하는 것입니다. import kotlinx.coroutines.* import kotlinx.coroutines.flow.* fun event..

[XX캠퍼스] 15.Kotlin Coroutines & Flow ( 완료 처리하기 )

https://dalinaum.github.io/coroutines-example/15 플로우 완료처리하기 플로우 완료처리하기 예제 75: 명령형 finally 블록 완료를 처리하는 방법 중의 하나는 명령형의 방식으로 finally 블록을 이용하는 것입니다. import kotlinx.coroutines.* import kotlinx.coroutines.flow.* fun simple() dalinaum.github.io finally onCompletion - 문제 발생여부를 알수 있다. 명령형 finally 블록 완료를 처리하는 방법 중의 하나는 명령형의 방식으로 finally 블록을 이용하는 것입니다. import kotlinx.coroutines.* import kotlinx.coroutines...

[XX캠퍼스] 14.Kotlin Coroutines & Flow ( 예외처리하기 )

https://dalinaum.github.io/coroutines-example/14 플로우 예외처리하기 플로우 예외처리하기 예제 71: 수집기 측에서 예외처리하기 예외는 collect을 하는 수집기 측에서도 try-catch 식을 이용해 할 수 있습니다. import kotlinx.coroutines.* import kotlinx.coroutines.flow.* fun simple(): Fl dalinaum.github.io try-catch 식을 이용 catch() 연산자를 이용해 업스트림에서만 예외처리 수집기 측에서 예외처리하기 예외는 collect을 하는 수집기 측에서도 try-catch 식을 이용해 할 수 있습니다. import kotlinx.coroutines.* import kotlinx...

[XX캠퍼스] 13.Kotlin Coroutines & Flow ( 플래트닝 )

https://dalinaum.github.io/coroutines-example/ 코루틴 실습 dalinaum.github.io 플로우에서는 3가지 유형의 flatMap을 지원하고 있습니다. flatMapConcat, flatMapMerge, flatMapLatest 입니다. flatMap 이란 ?? https://wooooooak.github.io/kotlin/2019/05/04/Map-vs-flatMap/ map과 flatMap에 대하여 · 쾌락코딩 map과 flatMap에 대하여 04 May 2019 | kotlin FP basic FlatMap을 이해하기 위해 Map과 FlatMap의 차이점을 알아보자. Map map은 이해하기 쉽다. 반복 가능한 배열을 대상으로, 배열의 각 요소를 하나하나 순..

[XX캠퍼스] 12.Kotlin Coroutines & Flow ( Flow 결합하기 )

zip으로 묶기 combine으로 묶기 zip으로 묶기 zip은 양쪽의 데이터를 한꺼번에 묶어 새로운 데이터를 만들어 냅니다. import kotlinx.coroutines.* import kotlinx.coroutines.flow.* fun main() = runBlocking { val nums = (1..3).asFlow() val strs = flowOf("일", "이", "삼") nums.zip(strs) { a, b -> "${a}은(는) $b" } .collect { println(it) } } 실행결과 1은(는) 일 2은(는) 이 3은(는) 삼 combine으로 묶기 combine은 양쪽의 데이터를 같은 시점에 묶지 않고 한 쪽이 갱신되면 새로 묶어 데이터를 만듭니다. import kotl..

[XX캠퍼스] 11.Kotlin Coroutines & Flow ( Flow 버퍼링 )

버퍼가 없는 플로우 보내는 쪽과 받는 쪽이 모두 바쁘다고 가정해봅시다 import kotlinx.coroutines.* import kotlinx.coroutines.flow.* import kotlin.system.* fun simple(): Flow = flow { for (i in 1..3) { delay(100) emit(i) } } fun main() = runBlocking { val time = measureTimeMillis { simple().collect { value -> delay(300) println(value) } } println("Collected in $time ms") } 실행결과 1 2 3 Collected in 1249 ms buffer buffer로 버퍼를 추가해 ..

[XX캠퍼스] 10.Kotlin Coroutines & Flow ( Flow 컨텍스트 )

플로우는 코루틴 컨텍스트에서 플로우는 현재 코루틴 컨텍스트에서 호출 됩니다. import kotlinx.coroutines.* import kotlinx.coroutines.flow.* fun log(msg: String) = println("[${Thread.currentThread().name}] $msg") fun simple(): Flow = flow { log("flow를 시작합니다.") for (i in 1..10) { emit(i) } } fun main() = runBlocking { launch(Dispatchers.IO) { simple() .collect { value -> log("${value} 를 받음.") } } } 실행결과 [DefaultDispatcher-worker-1 @..

[XX캠퍼스] 09.Kotlin Coroutines & Flow ( Flow 연산)

map filter filterNot transform take takeWhile drop dropWhile 종단 연산자(terminal operator) - reduce - fold count 연산자 플로우와 map 플로우에서 map 연산을 통해 데이터를 가공할 수 있습니다. import kotlin.random.Random import kotlinx.coroutines.* import kotlinx.coroutines.flow.* fun flowSomething(): Flow = flow { repeat(10) { emit(Random.nextInt(0, 500)) delay(10L) } } fun main() = runBlocking { flowSomething().map { // it으로 활용 "..

[XX캠퍼스] 08.Kotlin Coroutines & Flow ( Flow 기초 )

처음만나보는 플로우 Flow는 코틀린에서 쓸 수 있는 비동기 스트림입니다 - 코루틴을 사용하여 코틀린에서 쓸수 있는 스트림 - 스트림이기때문에 변화를 추적할 수 있다. import kotlin.random.Random import kotlinx.coroutines.* import kotlinx.coroutines.flow.* fun flowSomething(): Flow = flow { repeat(10) { emit(Random.nextInt(0, 500)) delay(10L) } } fun main() = runBlocking { flowSomething().collect { value -> println(value) } } Flow // Flow flow 플로우 빌더 함수를 ..

[XX캠퍼스] 07.Kotlin Coroutines & Flow (공유객체, Mutex, Actor )

공유 객체 문제 import kotlin.system.* import kotlinx.coroutines.* suspend fun massiveRun(action: suspend () -> Unit) { val n = 100 // 시작할 코루틴의 갯수 val k = 1000 // 코루틴 내에서 반복할 횟수 val elapsed = measureTimeMillis { coroutineScope { // scope for coroutines repeat(n) { launch { repeat(k) { action() } } } } } println("$elapsed ms동안 ${n * k}개의 액션을 수행했습니다.") } var counter = 0 fun main() = runBlocking { withCon..

728x90
반응형