본문 바로가기

[Android]/허접 Programming Tips

[Tip] ViewModel의 LiveData를 작성하는 방법

안녕하세요 허접샴푸입니다.

간단하게 Android ViewModel에서 LiveData를 작성하는 방법을 끄적여 봅니다.


[예] 출처: https://classroom.udacity.com/courses/ud9012/lessons/da3967cc-ba85-4045-bb46-dea1c770fb8b/concepts/d6779adf-494a-484d-870c-1e054eabed11

우선 MutableLiveData는 말 그대로 "Mutable" 즉 변형이 가능한 LiveData로서 읽기 / 쓰기가 가능합니다.

그리고 그냥 LiveData는 읽기 전용입니다.

참고로 LiveData에서 get() = { } 형태의 코드는 Kotlin 의 Backing Property라고 불리는 속성입니다.

(Backing Property 관련 참고 : https://brunch.co.kr/@mystoryg/14)


OOP(객체 지향 프로그래밍)에는 캡슐화(Encapsulation)가 있습니다. 

캡슐화의 정의는

1) 객체의 속성과 행위를 하나로 묶고,

2) 실제 구현 내용 일부를 외부에 감추어 은닉한다.

입니다. (출처: https://ko.wikipedia.org/wiki/%EC%BA%A1%EC%8A%90%ED%99%94)


 

즉 위 SampleViewModel 클래스에서 읽고 쓰기가 가능한 MutableLiveData는 Private으로 선언하여 해당 class 내에서만 사용되도록 캡슐화합니다.

Android Architecture에서 SampleViewModel을 참조하는 View가 있을텐데(Activity 혹은 Fragment), 그 View는 ViewModel의 MutableLiveData가 아닌 읽기만 가능한 LiveData를 Observe 합니다.

 

만약 MutableLiveData가 private이 아닐 경우, 

Activity 혹은 Fragment에서 viewModel._score = 100 이런식으로 수정이 가능하게 됩니다. 

그러나 MutableLiveData가 private일 경우

Activity 혹은 Fragment에서는 viewModel의 읽기 전용인 LiveData만 참조하게 되며 해당 LiveData의 값을 변형할 수 없게 됩니다.

 

이로써 캡슐화가 이루어지게 됩니다.