시배's Android

Kotlin | Backing Property & Backing Field 본문

Kotlin/Kotlin

Kotlin | Backing Property & Backing Field

si8ae 2024. 1. 19. 20:44

Backgroud

가정하에 개발 중인 앱에서 사용자의 나이를 다루는 클래스를 만든다고 가정해봅시다.

class User {
    var age: Int = 0
}

이 코드에서 User 클래스는 age라는 프로퍼티를 가지고 있습니다. 그런데 만약에 사용자의 나이가 음수가 될 수 없도록, 특별한 로직을 추가하고 싶다면 backing property와 backing field를 사용할 수 있습니다.

Backging Field

  • 하나의 접근자가 기본으로 구현되는 접근자를 사용하는 경우
  • 커스텀 접근자가 field 키워드를 통해 bakcing field를 참조하는 경우

먼저, backing field를 이용하여 프로퍼티에 값을 저장하고, 그 값을 읽고 쓰는 메커니즘을 만들어봅시다.

class User {
   var age: Int = 0
        set(value) {
            println("Setting the value of age to $value")
            if (value >= 0) {
                field = value
            } else {
                println("Age cannot be negative. Keeping the current value.")
            }
        }
}

위 코드를 보면 age 프로퍼티를 만들어 0으로 초기값을 설장하고 setter에서는 값을 검증하고 field = value를 통해 age의 값을 변경합니다.

Backing Property

  • 값을 User 클래스 내부에서만 변경하고 외부에서의 변경은 특정한 함수를 통해서만 이루어지게 하는 경우
  • setter와 getter의 타입을 다르게 하고 싶은 경우
class User {
    private var _age: Int = 0 

    var age: Int
        get() {
            println("Getting the value of age")
            return _age
        }
        set(value) {
            println("Setting the value of age to $value")
            if (value >= 0) {
                _age = value
            } else {
                println("Age cannot be negative. Keeping the current value.")
            }
        }
}