Flow
코루틴에서 Suspend 함수를 사용하면 작업이 모두 완료된 후에 단일 값만 반환받을 수 있습니다.
하지만 Flow를 사용하면 중간중간 진행되는 코루틴 작업 중에 갱신되는 값까지 반환받을 수 있습니다.
- 단일 값만 반환하는 정지 함수와 달리 여러 값을 순차적으로 내보낼 수 있는 유형입니다.
- 코루틴을 기반으로 빌드되며 여러 값을 제공할 수 있습니다.
- 비동기식으로 계산할 수 있는 데이터 스트림의 개념입니다.
- 내보낸 값은 동일한 유형이어야 합니다.
- 예를 들어, Flow<Int>는 정수 값을 내보내는 Flow입니다.
Flow 사용하기
- Producer (생산자) : 스트림에 추가되는 데이터를 생산합니다.
- Intermediary (중간 연산자) : 스트림에 내보내는 각각의 값이나 스트림 자체를 수정할 수 있습니다.
- Consumer (소비자) : 스트림의 값을 사용합니다.
Flow에서 생산자는 flow { } 블록 내부에서의 emit()을 통해 데이터를 생성합니다.
// Producer (생산자)
class FlowDataSource() {
fun getFlowData(): Flow<List<Data>> = flow {
val data = ...
emit(data)
delay(1000)
}
}
생산자가 데이터를 생성했다면, 중간 연산자는 생성된 데이터를 수정합니다.
대표적인 중간 연산자에는 map, filter, onEach 등이 있습니다.
// Intermediary (중간 연산자)
class FlowRepository(
private val flowDataSorce: FlowDataSource
} {
fun getItemInData(item: Item) =
flowDataSorce.getFlowData().map { it.filter { this.item = item } }
}
중간 연산자는 생산자가 생성한 데이터를 변형하여 소비자에게 데이터를 전달합니다.
소비자는 collect를 이용해 전달된 데이터를 사용합니다.
// Consumer (소비자)
class FlowViewModel(
private val flowRepository: FlowRepository
) : ViewModel() {
fun collectFlowData(item: Item) =
viewModelScope.launch {
flowRepository.getItemInData(item).collect {
...
}
}
}
}
728x90
반응형
'안드로이드 > 개념' 카테고리의 다른 글
[Android] Clean Architecture (0) | 2023.12.19 |
---|---|
[Android] 코루틴 (0) | 2023.11.27 |
[Android] Rx와 Observable (0) | 2023.11.03 |
[Android] 앱 아키텍처 패턴 (MVC, MVP, MVVM, MVI) (0) | 2023.10.27 |
[Android] 정규표현식 (0) | 2023.10.11 |