PHpullh
학습 라이브러리/Kotlin/lateinit & lazy 지연 초기화

KOTLIN · 기초 문법

lateinit & lazy 지연 초기화

생성 시점에 초기화할 수 없는 변수를 안전하게 다루는 두 가지 방법.

기초 문법중급lateinitlazy지연초기화by

핵심 설명

생성 시점에 초기화할 수 없는 변수를 안전하게 다루는 두 가지 방법.

Kotlin code

// lateinit — var에만 사용, non-null 보장 필요할 때
// (주로 DI, Android ViewModel, 테스트)
class UserService {
    lateinit var repository: UserRepository

    fun setup() {
        repository = UserRepository()
    }

    fun getUser() {
        // 초기화 전 접근 시 UninitializedPropertyAccessException
        if (::repository.isInitialized) {
            repository.find()
        }
    }
}

// lazy — val에 사용, 첫 접근 시 한 번만 초기화
// 기본적으로 thread-safe (LazyThreadSafetyMode.SYNCHRONIZED)
class Config {
    val heavyData: List<String> by lazy {
        println("처음 한 번만 실행")
        loadFromDisk()  // 비용이 큰 초기화
    }
}

fun loadFromDisk() = listOf("data1", "data2")

학습 팁

lazy는 기본적으로 thread-safe합니다. 단일 스레드 환경에서 성능을 높이려면 by lazy(LazyThreadSafetyMode.NONE)을 사용하세요.

주의할 점

lateinitInt, Boolean 같은 원시 타입에 사용할 수 없습니다. Nullable 타입에도 사용 불가입니다.

자주 묻는 질문

lateinit & lazy 지연 초기화란 무엇인가요?

생성 시점에 초기화할 수 없는 변수를 안전하게 다루는 두 가지 방법.

lateinit & lazy 지연 초기화 학습 시 주의할 점은 무엇인가요?

lateinit 은 Int , Boolean 같은 원시 타입에 사용할 수 없습니다. Nullable 타입에도 사용 불가입니다.