목록2024/12 (5)
안드로이드 개발자 노트
변환 함수 Flow를 반환하는 함수들은 대부분 다른 Flow를 만들어내는 함수를 호출해 동작한다.예를 들어, 다음과 같은 서비스가 있다고 가정해본다.class ObserveAppointmentsService( private val appointmentRepository: AppointmentRepository) { fun observeAppointments(): Flow> = appointmentRepository .observeAppointments() .filterIsInstance() .map { it.appointments } .distinctUntilChanged() .ret..
공유플로우 공유플로우를 통해 메세지를 보내면 대기하고 있는 모든 코루틴이 수신하게 된다.suspend fun main(): Unit = coroutineScope { val mutableSharedFlow = MutableSharedFlow(replay = 0) // or MutableSharedFlow() launch { mutableSharedFlow.collect { println("#1 received $it") } } launch { mutableSharedFlow.collect { println("#2 received $it") } } delay(1000)..
플로우는 값이 흐르기 때문에 여러 가지 방법으로 변형하는 것도 가능하다.플로우 생성과 최종 연산 사이의 연산들을 플로우 처리(flow processing)라고 한다.이 포스팅에서 예제는 다이어그램을 사용하여 원소가 어떻게 바뀌는지 보여준다.수평선은 시간, 선 위의 원소는 각 시간마다 플로우에서 내보낸 값들이다.위쪽 선은 연산이 실행되기 전의 플로우를 나타내며, 아래쪽 선은 연산이 끝난 뒤의 플로우를 나타낸다. map map은 새로운 플로우를 생성한 뒤 변형된 원소들을 하나씩 내보낸다.inline fun Flow.map( transform: suspend (value: T) -> R): Flow = flow { collect { value -> emit(transform(value..
Flow에서는 완료, 예외, 시작 같은 이벤트도 데이터 스트림의 일부로 간주되어 감지하고 처리할 수 있다.플로우 생명주기 함수를 사용하여 이러한 모든 상태를 Flow 안에서 관리할 수 있다. onEach: Flow에서 방출된 각 데이터를 처리하는 함수onStart: Flow가 시작되기 전에 실행할 작업 정의onCompletion: Flow가 완료되거나 취소되었을 때 실행onEmpty: Flow가 데이터를 방출하지 않을 경우 실행catch: Flow에서 발생한 예외를 처리flowOn: Flow가 실행되는 코루틴 디스패처를 변경 onEach onEach 람다식은 중단 함수이며, 원소는 순서대로 처리된다.다음 예제처럼 onEach에 delay를 넣으면 각각의 값이 흐를 때마다 지연되게 된다.suspend fu..
원시 값을 가지는 플로우 플로우가 어떤 값을 가져야 하는지 정의하는 flowOf 함수는 listOf함수처럼 사용할 수 있다.suspend fun main() { flowOf(1, 2, 3, 4, 5) .collect { print(it) } // 12345}값이 없는 플로우가 필요한 경우도 있다.suspend fun main() { emptyFlow() .collect { print(it) } // (nothing)} 컨버터 asFlow 함수를 사용해서 Iterable, Iterator, Sequence를 Flow로 바꿀 수 있다.suspend fun main() { listOf(1, 2, 3, 4, 5) // or setOf(1, 2, 3, 4, 5..