안녕하세요 허접샴푸입니다.
간단하게 Android ViewModel에서 LiveData를 작성하는 방법을 끄적여 봅니다.
우선 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의 값을 변형할 수 없게 됩니다.
이로써 캡슐화가 이루어지게 됩니다.
'[Android] > 허접 Programming Tips' 카테고리의 다른 글
[소셜로그인] 안드로이드 애플 로그인(Sign in with apple) 구현하기 3편 (2) | 2020.04.24 |
---|---|
[소셜로그인] 안드로이드 애플 로그인(Sign in with apple) 구현하기 2편 (1) | 2020.04.23 |
[소셜로그인] 안드로이드 애플 로그인(Sign in with apple) 구현하기 1편 (1) | 2020.04.20 |
[Navigation] Android Jetpack Navigation + BottomNavigationView (2 / 2) (9) | 2020.04.04 |
[Navigation] Android Jetpack Navigation + BottomNavigationView (1 / 2) (9) | 2020.04.03 |