[Elvis Operator]
val number : Int = number1 ?: 10
number1이 null -> 10 대입
not null -> number1 대입
[!!]
Not Null 임을 개발자가 보장하는것.
협업시 다른사람이 임의로 !!처리한 변수를 null 값을 삽입할 시... 에러가 발생하기 쉽다
애초에 어떤 식에 '!!'키워드를 붙일 수 있다는 것 자체가
nullable Varaible 인 경우일 때 의도치 않게 null값을 갖는 경우
nullPointerException 발생 위험이 생기기 때문에
연산자를 남발하는 것은 좋지 못하다.
[lateinit]
Non-null Property 가 값이 저장되지 않은 상태를 컴파일러가 '인정'하도록 하는 키워드.
키워드 단어 뜻 그대로 늦은 초기화를 진행한다.
오로지 'var' property 에만 지정 가능 // 당연한 것이, 'val'타입이라는건 추후 초기화 과정에서 새로운 값을 대입한다는 것이라 애초에 val 타입의 정의에 위배된다.
+ Primitive Data Type에는 키워드 지정이 불가능하다. // (추측컨데 주소값(Reference) 일반 값(Value)를 구분하기 위한 설정같다.)
kotlin 1.2 버전 이후부터는 isInitialized 메소드로 초기화 여부를 확인할 수 있다.
if (foo::bar.isInitialized) {
println(foo.bar)
}
when to use?
- 참조 대상이 바뀔 가능성 있는 Android 위젯 컴포넌트를 Lifecycle 때문에 특정 시점(늦게)에 초기화가 필요할 때
- 유닛 테스트에서 메소드 테스트
- var type Property Declaration and Initialization without null check
[lazy]
Property가 사용되는 최초의 지점에서 초기화 진행.,
오로지 val property 에만 사용 가능
when to use?
- 추후 참조 대상이 바뀌지 않을 Android 위젯 컴포넌트를 늦게 초기화할 때
[Reference]
https://kotlinlang.org/docs/reference/properties.html#late-initialized-properties
'JVM > Kotlin' 카테고리의 다른 글
[Kotlin] Comparator, Comparable (0) | 2022.09.16 |
---|---|
[Java, Kotlin] equals, ==, === 비교 (0) | 2022.09.16 |
[Kotlin] Array SumOf, minOf, maxOf (0) | 2020.10.13 |
[Kotlin] Companion Object (static in Java) (0) | 2020.06.28 |
[Kotlin] Abstract , Interface Class (0) | 2020.03.30 |