본문 바로가기
Kotlin/📕Kotlin 공부

Kotlin backing field

by yewoneeee 2024. 9. 12.

코틀린 공식 문서 참고

 

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

댓글