반응형
Kotlin Flow 실전 활용법
Kotlin Flow는 비동기 데이터 스트림을 처리하기 위해 만들어진 라이브러리로, 코루틴과 함께 사용하면 훨씬 간결하고 직관적인 비동기 프로그래밍이 가능합니다. 특히 UI 이벤트 처리, API 호출, 데이터베이스 업데이트 등 다양한 곳에서 활용할 수 있습니다.
1. Flow 기본 사용법
flow { } 빌더를 사용하면 데이터를 순차적으로 방출할 수 있습니다.
val simpleFlow = flow {
for (i in 1..3) {
emit(i)
delay(100) // 비동기 지연
}
}
GlobalScope.launch {
simpleFlow.collect { value ->
println("받은 값: $value")
}
}
2. Cold Stream의 특징
Flow는 Cold Stream입니다. 즉, collect()가 호출되기 전까지는 실행되지 않습니다.
val coldFlow = flow {
println("Flow 시작")
emit("Hello Flow")
}
coldFlow.collect { println(it) }
// collect 호출 시점에서 실행됨
3. Flow 변환 연산자
Flow는 map, filter, transform 등의 연산자를 지원합니다.
flowOf(1, 2, 3, 4, 5)
.filter { it % 2 == 0 }
.map { it * it }
.collect { println(it) }
// 출력: 4, 16
4. Flow와 Room 결합
Room Database는 Flow를 반환할 수 있어 실시간 데이터 변경 감지에 유용합니다.
@Dao
interface UserDao {
@Query("SELECT * FROM user")
fun getAllUsers(): Flow<List<User>>
}
이렇게 반환된 Flow는 UI에서 collect하여 실시간으로 반영할 수 있습니다.
5. StateFlow와 SharedFlow
StateFlow: 상태를 보관하며 항상 최신 데이터를 제공
SharedFlow: 여러 구독자에게 이벤트를 전달하는 용도
private val _state = MutableStateFlow(0)
val state: StateFlow<Int> = _state
fun increaseCounter() {
_state.value += 1
}
6. 실전 활용 시 장점
- UI 상태 관리 (StateFlow)
- 이벤트 스트림 처리 (SharedFlow)
- 실시간 DB 변경 반영 (Room + Flow)
- API 응답을 스트림으로 연결
정리: Kotlin Flow는 비동기 작업을 단순화하고, UI 상태와 이벤트를 관리하기 위한 강력한 도구입니다. Coroutine과 함께 사용하면 클린하고 유지보수하기 쉬운 코드를 작성할 수 있습니다.
반응형
'개발일기' 카테고리의 다른 글
| Kotlin Flow와 LiveData 비교 (6) | 2025.08.20 |
|---|---|
| StateFlow vs SharedFlow 차이와 활용법 (5) | 2025.08.19 |
| Kotlin Coroutine 예외 처리 패턴 (15) | 2025.08.15 |
| 안드로이드 ViewBinding 완벽 가이드 (5) | 2025.08.14 |
| Kotlin Flow 실전 활용법 (11) | 2025.08.13 |