1. LiveData를 Compose에서 사용하는 방법
LiveData는 Android의 UI 상태를 관리하는 기존 방식입니다.
Compose에서는 observeAsState()를 사용하여 LiveData를 Compose 상태(State<T?>)로 변환할 수 있습니다.
@Composable
fun LiveDataExample(viewModel: MyViewModel) {
val liveDataValue: String? by viewModel.myLiveData.observeAsState()
Text(text = liveDataValue ?: "No data available")
}
📌 observeAsState()란?
✔ LiveData<T>를 State<T?>로 변환합니다.
✔ LiveData의 값이 변경될 때마다 자동으로 UI를 재구성합니다.
✔ LiveData가 null일 수 있으므로 State<T?> 형태로 변환됩니다.
📌 LiveData의 단점:
- 초기값이 없을 수 있어 null 처리를 해야 함.
- Kotlin Coroutine과의 연동이 불편함.
- 비동기 처리 및 백프레셔(Backpressure) 처리가 어려움.
2. StateFlow를 Compose에서 사용하는 방법
StateFlow는 Flow 기반의 상태 관리를 위한 최적화된 방식입니다.
Compose에서는 collectAsState()를 사용하여 StateFlow를 Compose 상태로 변환할 수 있습니다.
class MyViewModel : ViewModel() {
private val _stateFlow = MutableStateFlow("Initial Value")
val stateFlow: StateFlow<String> = _stateFlow
fun updateData(newData: String) {
_stateFlow.value = newData
}
}
@Composable
fun StateFlowExample(viewModel: MyViewModel = viewModel()) {
val stateValue by viewModel.stateFlow.collectAsState() // StateFlow를 State로 변환
Column {
Text(text = stateValue)
Button(onClick = { viewModel.updateData("Updated Value") }) {
Text("Update Data")
}
}
}
📌 StateFlow의 장점: ✔ 항상 초기값이 존재함 (null-safe)
✔ Compose와의 통합성이 뛰어남 (collectAsState())
✔ Flow 기반이므로 비동기 데이터 흐름에 최적화됨
✔ 백프레셔(Backpressure) 처리 가능
📌 StateFlow의 단점:
- Android 생명주기와 직접 연동되지 않음 (UI가 사라져도 Flow는 계속 동작)
- 기존 프로젝트에서 LiveData를 많이 사용 중이라면 전환이 번거로울 수 있음
3. LiveData vs StateFlow 비교
📌 StateFlow가 더 나은 이유: ✔ Compose와의 통합성이 뛰어남 → collectAsState()로 쉽게 연동됨.
✔ 항상 초기값을 가지므로 null 처리를 신경 쓸 필요 없음.
✔ Coroutine 기반이므로 백프레셔와 비동기 데이터 흐름을 자연스럽게 지원.
✔ Compose의 선언적 방식과 더 잘 맞음.
4. 언제 LiveData를 써야 할까? (LiveData가 여전히 적합한 경우)
LiveData가 완전히 사라져야 하는 것은 아닙니다.
아직도 LiveData가 적합한 경우가 있습니다.
✔ LiveData가 적합한 상황
1️⃣ 기존 코드베이스에서 LiveData를 많이 사용 중인 경우
- 프로젝트가 LiveData에 강하게 의존하고 있다면, 한 번에 StateFlow로 바꾸는 것이 비효율적일 수 있음.
2️⃣ Android 생명주기(LifecycleOwner)와의 자동 연동이 필요한 경우
- LiveData는 Activity/Fragment가 활성화될 때만 동작하므로 UI가 사라지면 자동으로 데이터 업데이트가 중지됨.
3️⃣ 간단한 UI 상태 관리
- 간단한 데이터 바인딩 수준에서는 LiveData도 충분히 사용 가능.
📌 정리:
✔ LiveData는 기존 코드와의 호환성이 필요할 때 유용하지만, Compose에서는 StateFlow가 더 적합하다.
✔ StateFlow는 초기값이 있고, null-safe하며, Flow 기반이라 비동기 처리가 쉬워 Compose와 완벽하게 연동된다.
✔ 새로운 프로젝트에서는 StateFlow를 기본 선택지로 사용하는 것이 바람직하다.
'코틀린 & 컴포즈 & Java > 컴포즈 Compose' 카테고리의 다른 글
[Compose] UI를 구성할 때 요소를 정렬하는 방법 (0) | 2025.02.10 |
---|---|
[Compose] Compose에서 key의 역할과 사용법 (0) | 2025.02.06 |
[Compose] Paging3 클린 아키텍처 적용하다 의문점 (0) | 2025.02.06 |
[Compose] TextField의 여백 문제와 해결 방법 (0) | 2025.02.06 |
[Compose] Compose에서 =와 by의 차이 (kotilin 동일) (0) | 2025.02.05 |