전체 글
-
[Coroutine] 코루틴 학습 - 17 (Flow processing)Java/Kotlin 2022. 5. 28. 17:27
map, filter suspend fun main() { flowOf(1, 2, 3, 4) .map { it * it } .filter { it % 2 == 0 } .collect { println(it) } } // 4 // 16 컬렉션에서 흔하게 사용하는 map과 filter 기능과 같다. take and drop suspend fun main() { ('A'..'Z').asFlow() .take(5) .collect { println(it) } println() ('A'..'Z').asFlow() .drop(20) .collect { println(it) } println() } // A // B // C // D // E // // U // V // W // X // Y // Z take는 el..
-
[Coroutine] 코루틴 학습 - 16 (Flow lifecycle functions)Java/Kotlin 2022. 5. 25. 07:59
Flow는 한 쪽에서 다른 쪽으로 흐르는 파이프와 유사하다. Flow가 예외가 발생하거나 요청이 완료되었을 때, 이 정보는 전파되어 중단 단계에서 Flow를 close시킨다. Flow 연산의 결과로 값, 예외, 특정 이벤트들을 수신할 수 있다. onEach suspend fun main() { flowOf(1, 2, 3, 4) .onEach { println(it) } .collect() } // 1 // 2 // 3 // 4 flow의 각 값에 대한 연산을 수행할 경우엔 onEach를 사용할 수 있다. onEach의 람다 표현식은 일시중단 되는동안, 각 종단 요소들이 순차적으로 처리된다. suspend fun main() { flowOf(1, 2) .onEach { delay(1000) } .colle..
-
[Coroutine] 코루틴 학습 - 15 (Flow Building)Java/Kotlin 2022. 5. 21. 19:36
Flow는 빌더를 통해 비교적 간단하게 생성할 수 있다. Flow raw values suspend fun main() { flowOf(1, 2, 3, 4, 5) .collect { println(it) } emptyFlow() .collect { println(it) } } // 1 // 2 // 3 // 4 // 5 listOf와 같이 유사하게 flowOf()를 통해 간단하게 Flow를 생성할 수 있다. emptyFlow는 emptyList와 비슷하며, collect를 호출해도 아무일도 일어나지 않는다. Converters Iterable 인터페이스의 확장함수로, asFlow()를 호출하면 컬렉션을 손쉽게 Flow로 변환할 수 있다. (Sequence 또한 asFlow()를 지원한다.) suspend..
-
[Coroutine] 코루틴 학습 - 14 (Hot and Cold data sources)Java/Kotlin 2022. 5. 18. 13:54
Hot data source 컬렉션(List, Set 등..)과 같이 컨슈밍과 상관없이 데이터가 미리 생성되어 프로듀싱 되는 데이터를 hot이라고 한다. Channel 또한 hot에 속한다. Cold data source Sequence, Java Stream과 같이 실제로 데이터를 필요로 할 때 프로듀싱하는 것을 cold라고 한다. Flow, RxJava streams(Observable, Single 등..)을 cold에 속한다. 무한하게 실행될 수 있다. 최소한의 연산만 수행할 수 있다. 메모리를 즉시 할당할 필요가 없기 때문에 필요한 만큼 최소한의 메모리만 사용이 가능하다. fun main() { val l = buildList { repeat(3) { add("User$it") println("..