Effective Kotlin - lateinit와 notnull deligate

JINHO LEE·2024년 6월 24일
0

아이템 8: 적절하게 null을 처리하라 관련 내용 입니다.

lateinit과 notnull deligate

  • 변수를 초기화하지 않고 나중에 초기화할 때 사용되는 주요 도구

lateinit

var로 선언된 변수를 나중에 초기화할 수 있게 해준다.
주로 null이 허용되지 않는 타입에 대해 나중에 초기화를 하기 위해 사용된다.
클래스 내부에서만 사용 가능하며, 원시 타입 (Int, Long, Float 등)에는 사용할 수 없다.

특징

  • 초기화 전에 사용하면 UninitializedPropertyAccessException 예외가 발생한다.
  • nullable 타입에는 사용할 수 없다.
class Example {
    lateinit var name: String

    fun initializeName() {
        name = "Kotlin"
    }

    fun printName() {
        if (::name.isInitialized) {
            println(name)
        } else {
            println("Name is not initialized")
        }
    }
}

fun main() {
    val example = Example()
    example.initializeName()
    example.printName()
}

notnull 델리게이트

notNull 델리게이트는 Delegates 객체의 notNull 함수를 사용하여 초기화되지 않은 변수를 나중에 초기화하고, 초기화 전에는 IllegalStateException 예외를 발생시킨다.
lateinit과 달리 val에도 사용할 수 있다.

특징

  • 초기화 전 사용 시 IllegalStateException 예외 발생
  • nullable 타입을 제외한 모든 타입에 사용할 수 있다.
import kotlin.properties.Delegates

class Example {
    var name: String by Delegates.notNull<String>()

    fun initializeName() {
        name = "Kotlin"
    }

    fun printName() {
        try {
            println(name)
        } catch (e: IllegalStateException) {
            println("Name is not initialized")
        }
    }
}

fun main() {
    val example = Example()
    example.initializeName()
    example.printName()
}

0개의 댓글