728x90
늦은 초기화 : 객체 초기화를 늦게 하는 것
클래스 로딩 시간 감소와 미사용 전역변수의 메모리 공간을 줄여주는 효과
lateinit(Late Initialization)
- var로 변수가 선언 되기 때문에 초기화 이후에도 값을 변경 가능
- Nullable하지 않은 변수(Non-null 변수)를 선언은 하는데 초기화는 미루고 싶을 때 사용하는 문법
- 초기화 제대로 하지 않아도 컴파일 시에는 에러가 발생하지 않음
- 변수 선언하고 늦은 초기화를 하지 않은 경우 발생하는 에러 : UninitializedPropertyAccessException
- Primitive Type(Int, Float, Double, Long...)에서는 사용 불가 → Primitive Type을 전역변수로 사용하려면 by lazy를 쓰거나 초기화를 선언과 동시에 진행해야 함
- 변수를 초기화를 하는 코드에서부터 인스턴스가 만들어짐
- 초기화 전에는 변수 접근 불가
- 초기화가 되었는지는 (::변수명.isInitialized)를 통해서 체크 가능
- null로 초기화하지 못하는 이유 : null을 변수가 초기화되었는지 그렇지 않은지 판별하기 위한 특별한 기준값으로 사용하기 때문에(타입을 모호하게 만들 위험이 높음)
by lazy(Lazy Initialization)
- 호출 할 때 이 변수를 어떻게 초기화 해줄지에 대해 정의할 수 있는 구문
- val로 선언 되기 때문에 한 번 초기화 이후에는 값 변경 불가
- 초기화 제대로 하지 않으면 컴파일 에러 발생
- Non-null, Nullable 변수 모두 사용 가능한 늦은 초기화 문법
- 변수를 사용하는 코드에서부터 인스턴스가 만들어짐
- delegate object를 만듬(...???)
- 호출 할 때 한번 초기화를 진행하고 이후에는 변수를 가져다가 쓰기만 함
- Synchronized로 동작(Thread-safe)하기 때문에 다중 쓰레드 환경에서의 초기화를 신경쓰지 않아도 됨
반응형
'Kotlin > StoreInfo' 카테고리의 다른 글
Stack 간단 구현 (0) | 2024.04.11 |
---|---|
<정리> Scope functions (0) | 2023.12.19 |
<정리> 키오스크 프로그램 구현2 (0) | 2023.12.08 |
<정리> 키오스크 프로그램 구현 (0) | 2023.12.06 |
<정리> 호텔 예약 프로그램 구현 (2) | 2023.12.05 |