KOTLIN · 객체지향
지연 초기화 패턴 (Late Init)
lateinit으로 non-null 프로퍼티의 초기화를 지연합니다. DI 프레임워크나 테스트에서 자주 사용됩니다.
객체지향중급lateinitlazy-initisInitializeddependency-injection
핵심 설명
lateinit으로 non-null 프로퍼티의 초기화를 지연합니다. DI 프레임워크나 테스트에서 자주 사용됩니다.
Kotlin code
class DatabaseConnection {
lateinit var connectionString: String
lateinit var driver: String
fun isInitialized() = ::connectionString.isInitialized
fun connect() {
if (!::connectionString.isInitialized) {
throw IllegalStateException("연결 문자열이 설정되지 않았습니다")
}
println("연결: $connectionString (드라이버: $driver)")
}
}
// 테스트에서의 활용
class UserServiceTest {
lateinit var service: String // @BeforeEach에서 초기화
fun setUp() {
service = "UserService-Mock"
}
fun testCreate() {
setUp()
println("테스트: $service")
}
}
fun main() {
val db = DatabaseConnection()
println("초기화됨? ${db.isInitialized()}") // false
db.connectionString = "jdbc:mysql://localhost/test"
db.driver = "mysql"
println("초기화됨? ${db.isInitialized()}") // true
db.connect()
}학습 팁
::property.isInitialized로 초기화 여부를 안전하게 확인한 후 접근하면 UninitializedPropertyAccessException을 방지합니다.
주의할 점
lateinit은 var에만, 기본형이 아닌 타입에만 사용 가능합니다. Int, Boolean 등 기본형에는 사용할 수 없습니다.
자주 묻는 질문
지연 초기화 패턴 (Late Init)란 무엇인가요?
lateinit 으로 non-null 프로퍼티의 초기화를 지연합니다. DI 프레임워크나 테스트에서 자주 사용됩니다.
지연 초기화 패턴 (Late Init) 학습 시 주의할 점은 무엇인가요?
lateinit 은 var 에만, 기본형이 아닌 타입에만 사용 가능합니다. Int , Boolean 등 기본형에는 사용할 수 없습니다.
Continue Learning
Kotlin 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.