Mobile/Android(Kotlin)

[Android] Dive into Android LiveData. Basic concept of LiveData Library.

개발왕 금골드 2022. 8. 2. 23:27
반응형

 안녕하세요. 골드입니다. 오늘은 안드로이드에서 사용하는 LiveData에 대해서 정리하려고 합니다. LiveData는 이미 많은 분들이 사용하고 있을 것이라고 생각되는데요. 단순히 MVVM 패턴을 사용한다고 해서 기계적으로 ViewModel을 생성하고 변수를 LiveData로 래핑해서 Observe한 형식으로 만들어서 사용한 제 자신을 위한 글이기도 합니다.
 

1. LiveData를 사용하는 이유

 LiveData를 사용하는 이유는 구글이 권장한 안드로이드 개발 방식인 이유도 있겠지만, 중요한 건 Observe하다는 것과 수명 주기를 인식하는 것이라고 생각됩니다. 

 - Observe하다는 것은 LiveData가 감싸고 있는 객체를 항상 최신 데이터로 유지할 수 있다는 뜻입니다. 해당 변수를 구독하고 있는 곳에서 변수가 변하는지 아닌지를 계속 관찰하고 있으며, 변수가 변경되었을 때 이를 관찰자에게 알리게 되고 관찰자는 이 변수가 변했다는 것을 알 수 있게 됩니다.
 -  수명 주기를 인식한다는 것은 해당 LiveData를 사용하고 있는 곳의 수명 주기와 LiveData가 함께 한다는 뜻입니다. 예를 들어 Fragment - ViewModel로 이어진 하나의 코드 뭉치 안에서 LiveData는 ViewModel과 연결되어 있는 Fragment와 수명 주기를 함께 하고 이에 따라 Fragment의 수명 주기가 DESTROY로 변경될 때(대표적으로 화면을 돌리는 등) 관찰자를 삭제할 수 있습니다. 수명 주기가 활성 상태일 때는 변경 사항을 관찰자에게 알리고 수명 주기가 끝나는 즉시 수신 거부되어 누수 걱정이 없습니다.
 
LiveData의 장점 : 수명 주기를 인식한다. 최신 데이터를 유지할 수 있다. 
 
 

2. MutableLiveData와 LiveData

 Kotlin으로 개발한다면 이미 Mutable에 대해서 매우 친숙합니다. Mutable은 흔히 변경 가능한 이라고 알고 있고 LiveData도 마찬가지입니다. MutableLiveData는 setValue()와 postValue() 함수를 호출할 수 있습니다. 
 흔히 LiveData를 사용할 때 ViewModel 안에서 다음과 같이 사용하는 경우를 볼 수 있습니다.

private으로 MutableLiveData를 선언하고 이에 따라 LiveData에 값을 넣어주는 형식입니다. 이렇게 작성하는 이유는 은닉화에 이유도 있겠지만, 결국 비즈니스 로직에 대한 처리를 ViewModel과 그 이하에서 하기 위함입니다. 우리에게 관심사 분리는 매우 중요하니까요. 다만, 이 방법을 강제하는 것은 아닙니다. 필요한 경우 MutableLiveData를 선언하여 View의 변경사항에 대한 처리를 View 안에서 직접 넣어줄 수도 있습니다. 하나의 예제일 뿐이지만 꽤 의미있는 예제일 수도 있겠습니다. 
 
 

3. setValue()와 postValue()

 앞서 MutableLiveData는 setValue()와 postValue()를 호출할 수 있다고 말씀드렸습니다. 이는 둘 다 LiveData의 값을 변경하기 위해 사용하는 두 함수입니다. 
 - setValue : setValue는 반드시 Main Thread에서 호출되어야 하는 함수입니다. Main Thread에서 setValue()를 호출하는 즉시 LiveData의 값이 변경되어 해당 값을 참조할 수 있게 됩니다.
 - postValue : postValue는 runnable 블럭 내에서 전달받은 값을 Main Thread에 전달한 후 setValue를 호출합니다. 한 마디로 백그라운드에서 전달받은 값을 Main Thread로 넘겨준다는 말입니다. 이에 따라 postValue() 후 즉시 getValue()를 호출했을 경우 변경된 값을 가져오지 못 할 가능성이 높습니다. 백그라운드에서 작업을 진행 중인 동시에 getValue()를 호출했기 때문입니다. 
 
 
참고자료 : 
https://developer.android.com/reference/androidx/lifecycle/LiveData

 

LiveData  |  Android Developers

androidx.car.app.managers

developer.android.com

https://developer.android.com/topic/libraries/architecture/livedata?hl=ko 

 

LiveData 개요  |  Android 개발자  |  Android Developers

LiveData를 사용하여 수명 주기를 인식하는 방식으로 데이터를 처리합니다.

developer.android.com

 

반응형