| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
- onSaveInstanceState()
- onPause()
- arcitecture
- 프래그먼트
- Bundle
- TransactionTooLargeException
- onDestory()
- 풀리퀘스트
- 열거
- 깃허브
- configuration change
- NavGraph
- LifecycleOwner
- 가시성
- UI controller
- Backing property
- onCreate()
- IntArray
- ViewModel
- pullrequest
- Navgivation
- onRestart()
- LiveData
- onStop()
- fragment
- MVVM
- onResume()
- Navigation Graph
- Navigation component
- onStart()
- Today
- Total
밑빠진 지식에 블로그 쓰기
Backing property 본문
가시성 변경자로 캡슐화를 해야하는 이유
이 문제를 해결하려면 속성의 가시성 수정자를 공개로 만들 수 없습니다. 다른 클래스에서 데이터를 편집할 수 없어야 합니다.이는 외부 클래스가 뷰 모델에 지정된 게임 규칙을 따르지 않는 예기치 않은 방식으로 데이터를 변경할 수 있기 때문에 위험합니다. 예를 들어 외부 클래스가 점수를 음수 값으로 변경할 수 있습니다.
ViewModel 내에서 데이터는 편집 가능해야 하므로 public 및 var이어야 합니다.
ViewModel 외부에서 데이터는 읽을 수 있어야 하지만 편집할 수 없어야 하므로 데이터를 public 및 val로 노출해야 합니다.
이 동작을 달성하기 위해 Kotlin에는 지원 속성이라는 기능이 있습니다.
지원 속성을 사용하면 정확한 개체가 아닌 getter에서 무언가를 반환할 수 있습니다.
모든 속성에 대해 Kotlin 프레임워크가 게터와 세터를 생성한다는 것을 이미 배웠습니다.
getter 및 setter 메서드의 경우 이러한 메서드 중 하나 또는 둘 모두를 재정의하고 고유한 사용자 지정 동작을 제공할 수 있습니다. 지원 속성을 구현하려면 데이터의 읽기 전용 버전을 반환하도록 getter 메서드를 재정의합니다.
지원 속성의 예:
// Declare private mutable variable that can only be modified
// within the class it is declared.
private var _count = 0
// Declare another public immutable field and override its getter method.
// Return the private property's value in the getter method.
// When count is accessed, the get() function is called and
// the value of _count is returned.
val count: Int
get() = _count
예를 들어 앱에서 앱 데이터를 ViewModel에 비공개로 설정하려고 합니다.
ViewModel 클래스 내부:
속성 _count는 비공개이며 변경 가능합니다. 따라서 ViewModel 클래스 내에서만 액세스하고 편집할 수 있습니다. 관례는 private 속성 앞에 밑줄을 붙이는 것입니다.
ViewModel 클래스 외부:
Kotlin의 기본 가시성 수정자는 public이므로 count는 public이며 UI 컨트롤러와 같은 다른 클래스에서 액세스할 수 있습니다. get() 메서드만 재정의되므로 이 속성은 변경할 수 없으며 읽기 전용입니다. 외부 클래스가 이 속성에 액세스하면 _count 값을 반환하며 해당 값은 수정할 수 없습니다. 이렇게 하면 외부 클래스에 의한 원치 않고 안전하지 않은 변경으로부터 ViewModel 내부의 앱 데이터를 보호하지만 외부 호출자가 해당 값에 안전하게 액세스할 수 있습니다.
경고: ViewModel에서 변경 가능한 데이터 필드를 절대 노출하지 마십시오. 이 데이터를 다른 클래스에서 수정할 수 없는지 확인하세요. ViewModel 내부의 변경 가능한 데이터는 항상 비공개여야 합니다.
ViewModel에 데이터 저장하기 | Android Developers
이 Codelab에서는 아키텍처 구성요소 중 하나인 ViewModel을 사용하는 방법을 알아봅니다. 구성 변경 중에 앱 데이터를 유지하도록 ViewModel을 구현합니다.
developer.android.com