Android Jetpack

Android LiveData - 1 (MutableLivedata 간단예제)

개복치 개발자 2021. 12. 27. 01:45

 LiveData에 대해서 알아보겠습니다.

 

 말 그대로 생생한 데이터? 인 것 같은데 이 것을 왜 사용하는지 알고 가보겠습니다.

 

 구글 공식문서에서는 아래와 같이 설명해놨습니다.

 

 LiveData 사용의 이점

 

 LiveData를 사용하면 다음의 이점이 있습니다.

 

 UI와 데이터 상태의 일치 보장

 

LiveData는 관찰자 패턴을 따릅니다. LiveData는 기본 데이터가 변경될 때 Observer 객체에 알립니다. 코드를 통합하여 이러한 Observer 객체에 UI를 업데이트할 수 있습니다. 이렇게 하면 앱 데이터가 변경될 때마다 관찰자가 대신 UI를 업데이트하므로 개발자가 업데이트할 필요가 없습니다.

 

 메모리 누수 없음

 

관찰자는 Lifecycle 객체에 결합되어 있으며 연결된 수명 주기가 끝나면 자동으로 삭제됩니다.

 

 중지된 활동으로 인한 비정상 종료 없음

 

활동이 백 스택에 있을 때를 비롯하여 관찰자의 수명 주기가 비활성 상태에 있으면 관찰자는 어떤 LiveData 이벤트도 받지 않습니다.

 

수명 주기를 더 이상 수동으로 처리하지 않음

 

UI 구성요소는 관련 데이터를 관찰하기만 할 뿐 관찰을 중지하거나 다시 시작하지 않습니다. LiveData는 관찰하는 동안 관련 수명 주기 상태의 변경을 인식하므로 이 모든 것을 자동으로 관리합니다.

 

최신 데이터 유지

 

수명 주기가 비활성화되면 다시 활성화될 때 최신 데이터를 수신합니다. 예를 들어 백그라운드에 있었던 활동은 포그라운드로 돌아온 직후 최신 데이터를 받습니다.

 

적절한 구성 변경

 

기기 회전과 같은 구성 변경으로 인해 활동 또는 프래그먼트가 다시 생성되면 사용 가능한 최신 데이터를 즉시 받게 됩니다.

 

리소스 공유

 

앱에서 시스템 서비스를 공유할 수 있도록 싱글톤 패턴을 사용하는 LiveData 객체를 확장하여 시스템 서비스를 래핑할 수 있습니다. LiveData 객체가 시스템 서비스에 한 번 연결되면 리소스가 필요한 모든 관찰자가 LiveData 객체를 볼 수 있습니다. 자세한 내용은 LiveData 확장을 참고하세요.

 

 -- 데이터를 관찰해줄 수 있다. / LifeCycle과 결합해서

 

 

 자, 여기까지 해보면 감이 오지 않습니다.

 

 실제로 간단한 예제를 만들어서 어떻게 하는지 한번 알아보겠습니다.

 

 아래와 같이 버튼이 있고, 누르면 숫자를 올리는 앱입니다.

 

 레이아웃은 아래와 같습니다.

 

 원래 기존의 방식대로 했다면

 

 아래와 같이 해줬을겁니다.

 

var count = 0

binding.plusBtn.setOnClickListener {
	binding.viewTextArea.text = count.toString()
	count++
}

 

 그러나, 이 것을 LiveData를 이용합니다.

 

 MutableLiveData를 이용해서 해보겠습니다.

 

 버튼이 클릭될 때 MutableLiveData의 값을 올려주고, MutableLiveData의 값을 observe해서, 올리도록 해보겠습니다.

 

 코드는 아래와 같습니다.

 

 

 이 부분을 ViewModel과 다음 글에서 연결해보겠습니다.

 

 

 

 - 참조 

 

https://developer.android.com/topic/libraries/architecture/livedata