시배's Android
Kotlin | Backing Property & Backing Field 본문
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.")
}
}
}
'Kotlin > Kotlin' 카테고리의 다른 글
Kotlin | 왜 코틀린에서 "by" 키워드를 사용할까?? (0) | 2023.11.01 |
---|---|
Kotlin | The Big Difference Between Flows and Channels in Kotlin (0) | 2023.09.20 |
Kotlin | KSP vs KAPS (0) | 2023.09.20 |
Kotlin | Deep Dive into Sealed Interfalces (0) | 2023.09.03 |
Kotlin | Generic (0) | 2023.08.27 |