코틀린 공식 문서 참고
Property
var <propertyName>[: <PropertyType>] [= <property_initializer>]
[<getter>]
[<setter>]
initializer와 getter, setter는 옵션임
코틀린에서는 프로퍼티에 대한 기본 접근자 메서드(getter, setter)를 자동으로 생성해줌
backing field란?
backing field는 프로퍼티의 값을 메모리에 저장하기 위해 사용되는 필드
코틀린은 프로퍼티에 backing field가 필요하면 자동으로 생성해줌
자동으로 backing field가 생성되는 경우
코틀린이 backing field를 자동으로 생성해주는 경우는 아래와 같다.
1. 적어도 하나의 접근자(getter, setter)가 기본 구현을 사용할 때
만약 프로퍼티의 getter, setter가 기본 구현을 사용한다면, 자동으로 backing field가 생성됨
기본 구현이 값을 저장하고 반환할 수 있는 공간이 필요하기 때문
2. 커스텀 접근자(getter, setter)에서 field를 참조할 때
프로퍼티의 getter, setter를 직접 구현했더라도, field 키워드를 사용해서 값을 직접 접근하면 backing field가 생성됨
var counter = 0 // the initializer assigns the backing field directly
set(value) {
if (value >= 0)
field = value
// counter = value // ERROR StackOverflow: Using actual name 'counter' would make setter recursive
}
위 코드에선 counter 프로퍼티가 기본 getter를 사용하기 때문에 backing field가 자동으로 생성됨
기본 getter는 자동으로 backing field에 저장된 값을 반환하는 역할을 함
여기서 setter는 커스텀 setter를 사용했는데 field 키워드를 통해 값에 접근하면 backing field가 생성됨
만약 setter에서 field가 아니라 counter를 사용하게 되면 재귀 호출이 발생해 StackOverflowError가 발생
backing field를 사용하지 않는 경우
val isEmpty: Boolean
get() = this.size == 0
'Kotlin > 📕Kotlin 공부' 카테고리의 다른 글
Kotlin 널 안정성(Null Safety) (1) | 2024.09.12 |
---|---|
isEmpty, isBlank 차이 (0) | 2024.07.27 |
Kotlin Mutable, Immutable List (0) | 2024.07.26 |
StringBuilder (0) | 2024.07.20 |
댓글