Codelab으로 LiveData 알아보기 - 3. Encapsulate the LiveData

2023. 1. 26. 02:30·Dev experience/Android
728x90
반응형

캡슐화는 객체의 필드에 직접 접근을 막는 방법이다.

 

우리가 객체를 캡슐화할 때 private인 내부 필드를 수정할 수 있도록 public 메소드들을 제공해야 한다.

 

캡슐화를 사용하면 다른 클래스가 이 내부 필드를 어떻게 조작할지 제어할 수 있다.

 

 

현재, 우리가 수정한 코드에서 viewModel.score.value를 사용하듯

모든 외부 클래스에서 score와 word 변수를 수정할 수 있다.

 

우리가 지금 만드는 이 앱에서는 문제가 없을 수 있지만, 출시용 앱에서는 ViewModel 객체의 데이터를 조작해야한다.

 

오직 ViewModel이 앱의 데이터를 수정해야한다.

하지만, UI controller가 데이터를 읽을 필요가 있고, 그래서 데이터 필드는 완벽한 private이 될 수 없다.

 

앱의 데이터를 캡슐화 하려면 MutableLiveData 객체와 LiveData 객체를 사용해야 한다.

 

MutableLiveData, LiveData 차이점

 

ㄱ. MutableLiveData 객체 안의 데이터는 바뀔 수 있다.

ViewModel 안에서 데이터는 수정 가능해야 하고, 그래서 MutableLiveData를 사용해야 한다.

 

ㄴ. LiveData 객체 안의 데이터는 읽을 수 있지만 바뀔 수 없다.

ViewModel 밖에서부터 데이터는 읽을 수 있어야 하지만 수정 불가능해야 한다.

그래서 데이터는 LiveData로 노출되어야 한다.

 

 

이 방법을 수행하기 위해서는 Kotlin의 backing property를 사용해야 한다.

(backing property가 정확히 무엇인지 어떻게 동작하는지는 모르겠지만 codelab에서는 짧게 설명해주고 있다.)

 

backing property는 정확한 객체가 아닌 getter에서 무언가를 리턴하도록 해준다.

(해석이 참 모호한데 getter에서 무언가를 리턴하도록 해준다는 것이 핵심인듯하다)

 

Add a backing property to score and word

1. GameViewModel에서 score를 private으로 만든다.

 

2. backing property에서 사용되는 naming convention을 따르기위해 score를 _score로 변경한다.

_score 속성은 이제 내부적으로 사용되는 게임 점수의 mutable 버전이다.

 

3. LiveData의 public 버전인 score를 만든다.

// The current score
private val _score = MutableLiveData<Int>()
val score: LiveData<Int>

 

4. 이제 Android Studio에서 초기화 에러가 보인다.

GameFragment에서 score는 LiveData 참조 변수이고 setter에 더 이상 접근할 수 없기 때문이다.

 

따라서, backing property를 사용해 custom getter를 만들어주었다.

val score: LiveData<Int>
   get() = _score

 

5. GameViewModel에서 score의 참조를 내부의 변경 가능한 _score 로 바꿔준다.

 

6. word도 score처럼 바꿔준다.

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'Dev experience > Android' 카테고리의 다른 글

안드로이드 스튜디오와 Gradle 버전의 호환성 이슈  (0) 2023.02.28
기존 프로젝트의 Java to Kotlin 전환 시 주의점  (0) 2023.02.26
Codelab으로 LiveData 알아보기 - 2. Attach observers to the LiveData objects  (0) 2023.01.18
Codelab으로 LiveData 알아보기 - 1. Add LiveData to the GameViewModel  (0) 2023.01.17
Codelab으로 LiveData 알아보기 - 과정 소개  (2) 2023.01.15
'Dev experience/Android' 카테고리의 다른 글
  • 안드로이드 스튜디오와 Gradle 버전의 호환성 이슈
  • 기존 프로젝트의 Java to Kotlin 전환 시 주의점
  • Codelab으로 LiveData 알아보기 - 2. Attach observers to the LiveData objects
  • Codelab으로 LiveData 알아보기 - 1. Add LiveData to the GameViewModel
BonusTrack02.dev
BonusTrack02.dev
공부, 일상
  • BonusTrack02.dev
    BonusTrack02.dev
    BonusTrack02.dev
  • 전체
    오늘
    어제
    • 분류 전체보기 (237)
      • Dev experience (85)
        • Android (84)
        • Kotlin (1)
      • Study (62)
        • Kotlin (26)
        • Swift (17)
        • Java (19)
      • 프로그래머스 (68)
      • 주저리주저리 (22)
        • 카페 (5)
        • 음식점 (4)
        • 컨퍼런스 (1)
        • 팝업스토어 (4)
        • 전시회 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Kotlin
    android
    coroutines
    getNumericValue
    안드로이드
    viewModelScope
    스위프트
    자바
    room
    LiveData
    CodeLab
    Observer
    SWIFT
    ios
    코틀린
    PCCE
    MVVM
    배열
    aac
    daterangepicker
    코루틴
    오블완
    티스토리챌린지
    jetpack
    programmers
    Java
    databinding
    프로그래머스
    ViewModel
    Material
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
BonusTrack02.dev
Codelab으로 LiveData 알아보기 - 3. Encapsulate the LiveData
상단으로

티스토리툴바