LiveData
LiveData는 Android Architecture Components의 일부로서, 생명주기를 고려한 데이터 홀더 클래스입니다. 주로 UI와 데이터 상태의 일치를 유지하는 데 사용됩니다.
LiveData의 특징
1. 생명주기를 고려: LiveData는 `LifecycleOwner` (액티비티, 프래그먼트 등)의 생명주기 상태를 파악하고, 액티비티가 활성 상태일 때만 업데이트를 보냅니다.
2. 메모리 누수 방지: 자동으로 생명주기와 연결되어 있으므로 메모리 누수가 덜 발생합니다.
3. 캡슐화: LiveData는 변경 불가능한 데이터를 제공하여 캡슐화를 잘 지킵니다.
LiveData 더 자세히 알아보기
https://developer.android.com/topic/libraries/architecture/livedata?hl=ko
Flow
Flow는 Kotlin Coroutines 라이브러리의 일부로서, 비동기 데이터 스트림을 표현합니다. Flow는 cold 스트림이며, 구독자가 있을 때만 데이터를 생성합니다.
Flow의 특징
1. 코루틴과 통합: Flow는 코루틴과 자연스럽게 작동하므로, 비동기 작업을 더 간단하고 효율적으로 할 수 있습니다.
2. 백프레셔 지원: Flow는 비동기 데이터 처리 시 백프레셔를 자연스럽게 다룰 수 있습니다.
3. 함수형 연산자: `map`, `filter`, `transform` 등 다양한 함수형 연산자를 제공합니다.
차이점
1. 생명주기: LiveData는 생명주기를 자동으로 관리하지만, Flow는 그렇지 않습니다.
2. 코루틴 지원: Flow는 코루틴과 통합이 잘 되어 있으나 LiveData는 그렇지 않습니다.
3. 백프레셔: Flow는 백프레셔를 처리할 수 있지만, LiveData는 그렇지 않습니다.
4. 함수형 연산자: Flow는 다양한 함수형 연산자를 제공하는 반면, LiveData는 제한적입니다.
현재 많이 사용되고 있는 형태
- LiveData: 주로 UI 레이어에서 생명주기와 관련된 간단한 작업에 사용됩니다.
- Flow: 비즈니스 로직, 백그라운드 작업, 더 복잡한 연산을 다룰 때 주로 사용됩니다.
최근에는 Flow가 더 많은 관심을 받고 있습니다. 특히 클린 아키텍처와 같은 모던한 아키텍처 패턴에서는 Flow가 더 적합한 경우가 많습니다.
LiveData 사용예시 (ex.카운터)
: ViewModel에서 LiveData를 사용하여 간단한 카운터 구현
class LiveDataViewModel : ViewModel() {
private val _count = MutableLiveData<Int>(0)
val count: LiveData<Int> = _count
fun increment() {
_count.value = (_count.value ?: 0) + 1
}
}
class LiveDataActivity : AppCompatActivity() {
private lateinit var viewModel: LiveDataViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
viewModel = ViewModelProvider(this).get(LiveDataViewModel::class.java)
viewModel.count.observe(this, Observer { count ->
// UI 업데이트
println("Current Count: $count")
})
}
}
Flow
ViewModel에서 간단한 카운터 구현
class FlowViewModel : ViewModel() {
private val _count = MutableStateFlow(0)
val count: StateFlow<Int> = _count
fun increment() {
_count.value += 1
}
}
class FlowActivity : AppCompatActivity() {
private lateinit var viewModel: FlowViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
viewModel = ViewModelProvider(this).get(FlowViewModel::class.java)
lifecycleScope.launchWhenStarted {
viewModel.count.collect { count ->
// UI 업데이트
println("Current Count: $count")
}
}
}
}
LiveData는 observe 메소드를 사용하여 UI를 업데이트하며, 생명주기를 자동으로 관리합니다.
Flow는 코루틴 스코프 내에서 collect 함수를 사용하여 데이터를 수집합니다. 생명주기 관리는 수동으로 해야 하며, lifecycleScope나 viewModelScope 등을 활용할 수 있습니다.
'Android' 카테고리의 다른 글
Android WorkManager Example 안정적인 작업 처리하기 (0) | 2023.11.08 |
---|---|
Jetpack Media3 알아보기 (0) | 2023.09.29 |
Git & Github 간단한 사용방법 정리 + 브랜치 만드는 이유 (0) | 2023.08.02 |
ExoPlayer clip media (0) | 2023.08.01 |
Android 이미지 비율 계산 Ratio (0) | 2023.07.25 |
댓글