Kotlin 문법 - Backing Field 개념

느린달팽이·2025년 8월 18일

코틀린 복습

목록 보기
14/25

Backing Field란?

  • 프로퍼티를 정의할 때, 코틀린이 자동으로 생성해주는 실제 값을 저장하는 공간
  • getter/setter를 직접 정의할 때 프로퍼티를 자기 자신으로 참조하면 무한 루프에 빠질 수 있음 → 이를 막기 위해 field라는 키워드를 사용

기본 동작

class Person {
    var name: String = "홍길동"
        get() = field        // name 프로퍼티의 실제 저장값 반환
        set(value) {
            field = value    // name의 실제 저장값을 변경
        }
}
  • field → 프로퍼티의 backing field를 의미
  • getter에서 name을 직접 호출하면 getter가 무한히 호출됨 → 대신 field를 사용해야 함

무한 루프 예시 (잘못된 코드)

class Person {
    var name: String = "홍길동"
        get() = name   // ❌ 잘못된 접근 → getter 재귀 호출
}

➡️ get() 안에서 다시 name을 호출하므로 무한 루프 발생


커스텀 활용 예시

class Person {
    var age: Int = 0
        set(value) {
            field = if (value < 0) 0 else value // 음수 방지 로직
        }
}

fun main() {
    val p = Person()
    p.age = -5
    println(p.age) // 0
}

정리 포인트

  • field는 오직 프로퍼티 내부의 getter/setter 안에서만 사용 가능
  • backing field는 프로퍼티에 대한 실제 저장 공간 역할
  • val은 setter가 없으므로 읽기 전용 backing field만 가짐
  • custom getter만 정의하고 field를 쓰지 않으면 backing field 자체가 생성되지 않음 (즉, 계산된 값만 반환하는 프로퍼티로 동작)
profile
한걸음이라도 제대로... 쓰임있는 앱을 만들자

0개의 댓글