밑빠진 지식에 블로그 쓰기

Backing property 본문

카테고리 없음

Backing property

쓰는녀석 2023. 3. 29. 18:51

가시성 변경자로 캡슐화를 해야하는 이유

이 문제를 해결하려면 속성의 가시성 수정자를 공개로 만들 수 없습니다. 다른 클래스에서 데이터를 편집할 수 없어야 합니다.이는 외부 클래스가 뷰 모델에 지정된 게임 규칙을 따르지 않는 예기치 않은 방식으로 데이터를 변경할 수 있기 때문에 위험합니다. 예를 들어 외부 클래스가 점수를 음수 값으로 변경할 수 있습니다.

 

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 내부의 변경 가능한 데이터는 항상 비공개여야 합니다.

 

https://developer.android.com/codelabs/basic-android-kotlin-training-viewmodel?continue=https%3A%2F%2Fdeveloper.android.com%2Fcourses%2Fpathways%2Fandroid-basics-kotlin-unit-3-pathway-3%23codelab-https%3A%2F%2Fdeveloper.android.com%2Fcodelabs%2Fbasic-android-kotlin-training-viewmodel#4 

 

ViewModel에 데이터 저장하기  |  Android Developers

이 Codelab에서는 아키텍처 구성요소 중 하나인 ViewModel을 사용하는 방법을 알아봅니다. 구성 변경 중에 앱 데이터를 유지하도록 ViewModel을 구현합니다.

developer.android.com