
[Android] LiveData – 실시간 UI 업데이트를 위한 필수 컴포넌트
안드로이드 개발에서 UI와 데이터를 효율적으로 연결하는 방법 중 하나가 LiveData이다. LiveData는 데이터가 변경될 때 자동으로 UI를 업데이트할 수 있도록 도와주며, 이를 통해 메모리 누수 없이 안전한 방식으로 데이터를 관리할 수 있다.
1. LiveData란?
LiveData는 Android Jetpack의 Architecture Components 중 하나로, Lifecycle-aware(생명주기 인식) 기능을 제공하는 Observable 데이터 홀더 클래스이다. 즉, 데이터가 변경될 때 자동으로 감지하여 UI에 반영할 수 있다.
LiveData의 주요 특징
- Lifecycle-aware: 액티비티, 프래그먼트 등의 생명주기를 인식하여 자동으로 UI를 업데이트
- 자동 UI 업데이트: 데이터가 변경되면 자동으로 감지하여 변경 내용을 반영
- 비동기 처리 용이: Room, ViewModel 등과 함께 사용하여 데이터 변경을 효과적으로 처리
2. LiveData 기본 사용법
LiveData를 활용하려면 ViewModel과 함께 사용하는 것이 일반적이다. 다음은 기본적인 LiveData의 선언 및 활용 방법이다.
2.1. LiveData 선언 및 초기화
class MyViewModel : ViewModel() {
private val _text = MutableLiveData<String>("초기 값")
val text: LiveData<String> = _text
fun updateText(newText: String) {
_text.value = newText
}
}
2.2. LiveData 관찰(Observer) 및 UI 업데이트
class MyActivity : AppCompatActivity() {
private lateinit var viewModel: MyViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val textView: TextView = findViewById(R.id.textView)
val button: Button = findViewById(R.id.button)
viewModel = ViewModelProvider(this).get(MyViewModel::class.java)
// LiveData 관찰
viewModel.text.observe(this, Observer { newText ->
textView.text = newText
})
// 버튼 클릭 시 LiveData 값 변경
button.setOnClickListener {
viewModel.updateText("LiveData 업데이트됨!")
}
}
}
3. LiveData의 고급 기능
3.1. Transformations.map & Transformations.switchMap
Transformations.map
과 Transformations.switchMap
을 활용하면 LiveData 데이터를 변형하여 사용할 수 있다.
Transformations.map 예제
val userNameLength: LiveData<Int> = Transformations.map(userNameLiveData) { name ->
name.length
}
Transformations.switchMap 예제
val userLiveData: LiveData<User> = repository.getUser()
val userName: LiveData<String> = Transformations.switchMap(userLiveData) { user ->
MutableLiveData(user.name)
}
4. LiveData와 StateFlow의 차이점
최근에는 LiveData와 함께 StateFlow
도 많이 사용된다. 두 개념을 비교하면 다음과 같다.
기능 | LiveData | StateFlow |
---|---|---|
생명주기 인식 | O | X |
UI 업데이트 | O | O |
상태 유지 | X | O |
비동기 처리 | O | O |
즉, LiveData는 UI 관련 데이터에 적합하고, StateFlow
는 상태 저장 및 흐름 제어가 필요할 때 사용된다.
LiveData는 안드로이드 앱에서 UI와 데이터를 효과적으로 연결하는 필수 컴포넌트 중 하나이다. ViewModel과 함께 사용하면 생명주기 관리가 쉬워지고, 자동으로 UI를 업데이트할 수 있어 개발 생산성을 높일 수 있다. 특히, Transformations.map
, switchMap
등의 기능을 활용하면 더욱 유용하게 활용할 수 있다.