전체 글(60)
-
[Android A..Z] Flow 중간연산자 정리
flow의 중간연산자는 flow에 대한 변환을 수행하며, 그 결과로 새로운 flow를 반환한다. 이러한 중간연산자들은 종단 연산자가 호출될 때까지 실제 작업을 수행하지 않는 지연(lazy)특성을 가지고 있다. 지연(lazy)이란? 실제 데이터가 수집되기 시작할 때까지 주간 연산자의 작업이 실행되지 않는 것을 말한다. val flow = flowOf(1, 2, 3).map {it * 2} flow.collect { println(it) } 예를들어 1,2,3 값을 가지고 있는 스트림에 대해 map 연산자를 통해 변환한다고 가정한다. 위 코드에서 map함수는 종단 연산자인 collect()함수가 호출될 떄까지 아무런 동작도 하지 않는다. 이렇게 지연 작업을 통해 계산을 미룸으로써 리소스 사용량을 최적화한다...
2024.04.21 -
[Android A..Z] Flow onXXX연산자 예외처리 정리
onEach : 각 아이템 마다 무언가 할 때 fetchBoardDetailItemUseCase(id) .onStart { _boardDetailUiState.update { it.copy( isLoading = true, items = listOf() ) } }.onEach { Log.d(TAG, "Item ${it.toString()}") } Flow에서 아이템을 방출할 때 마다 실행하도록 할 수 있다. 업스트림에서 흘러나오는 값을 그대로 내보낸다. onStart : 시작할 때 fetchBoardDetailItemUseCase(id) .onStart { _boardDetailUiState.update { it.copy( isLoading = true, items = listOf() ) } } onSt..
2024.04.21 -
[Android A..Z] Flow collect vs collectLatest
https://kotlinworld.com/252 너무 잘 정리되어 있는 글을 바탕으로 이해하기 쉽게 요약한다. Collect 데이터를 수집하는데, suspend fun 수행이 끝나면 다음 suspend fun을 수행한다 즉 아래 코드를 보면 collect 시점에서 해당 스코프가 끝이나면 다시 수집하는 형식 값 하나를 print 하는데 1초가 걸리고 총 10초가 걸려서 값이 찍힌다. val flow = flow { for (i in 0..10) { emit(i) delay(100L) } } init { viewModelScope.launch { flow.collect { println("!!!방출된 값 $it") delay(1000L) } } } CollectLatest collectLatest는 항상 ..
2024.03.30