프로그램
[코틀린] Kotlin : Null / 세이프콜연산자 / 엘비스연산자 / 확정연산자 / 늦은초기화(lateinit, lazy)
오디세이99
2022. 12. 30. 14:25
728x90
반응형
/**
Null
- 함수등에서 null 리턴시 null 체크 필요한데, NPE(NullPointerException)가 발생.
- 코틀린은 기본적으로 객체는 null 이 될 수 없다. 모든 객체는 생성과 동시에 초기화해야 함
- 코틀린은 컴파일시 null 가능성을 체크해 줌
*/
fun main() {
println("*** Null ***")
println("*** Nullable / Non-Nullable ***")
//var sData : String // 초기화 하지 않아서 에러
//var sData : String = null // non-nullable 자료형에 null을 넣어서 에러
var sData : String? = null // ? 를 붙여서 null 가능
println("*** Null return ***")
var vData : String? = null
//vData = "abcdefg"
//println(vData.reversed()) //Error
println(vData?.reversed())
println("*** 세이프콜(안전 호출) 연산자(?) ***")
fun func(arg : String?) : String? { // 인수, 반환값 모두 null 가능
return arg?.reversed() // arg가 null이라면 null을 반환
}
println(func("abcde")) // 출력 : edcba
println(func(null)) // 출력 : null
println("*** 앨비스 연산자(?) ***") // null일때 기본값 지정
fun func2(arg : String?) : String { // 인수 null 가능, 반환값 null 불가
return arg?.reversed()?:"데이터 확인" // null일때 기본값 리턴 (엘비스 연산자)
}
println(func2("abcde")) // 출력 : edcba
println(func2(null)) // 출력 : 데이터 확인
println("*** 확정 연산자(!!) ***")
fun func3(arg : String?) : String { // 인수 null 가능, 반환값 null 불가
return arg!!.reversed() // 절대 null이 아님을 보증
}
println(func3("abcde")) // edcba
//println(func3(null)) // 실행시 에러 발생
println("*** lateinit / lazy ***") // lateinit : var 변수 늦은 초기화, lazy : val 변수 늦은 초기화
lateinit var vData1 : String
vData1 = "lateinit"
println(vData1)
val vData2 : String by lazy{"lazy"} // 생성될때 초기화되지 않고 처음 호출시 초기화됨. 선언시에는 메모리에 로드되지 않음
println(vData2)
}
728x90
반응형