코틀린에서는 null을 허용하는 nullabl 변수가 별도로 존재한다.
이런 변수들을 일일히 if로 체크해서 로직을 하는건 아름답지 못할 수 있다.
다른 방법으로 null을 처리하는 방법을 알아보자.
null을 처리하는 방법은 아래와 같이 몇가지가 있다
참조 연산자를 실행하기 전에 객체가 null인지 확인부터 하고,
객체가 null이라면 뒤따라 오는 연산을 실행하지 않는 연산자
fun main() {
var a: String? = null
println(a?.toUpperCase()) // 'null' 출력
}
객체가 null이 아니라면 그대로 사용하지만 null이라면 연산자 우측의 default 객체를 사용한다.
fun main() {
var a: String? = null
println(a?:"default".toUpperCase()) // 'DEFAULT' 출력
}
참조 연산자를 사용 할때 null여부를 컴파일시 null 체크를 하지 않고 코드를 실행한다.
런타임시 null pointer Exception을 의도적으로 발생시킬 수 있다.
fun main() {
var a: String? = null
println(a!!.toUpperCase()) // null pointer Exception 발생
}
null safe 연산자는 스코프 함수와 같이 사용하면 더욱 편리하다.
if 연산자 대신 사용하면 좀 더 깔끔한 코드를 구현 할 수 있다.
fun main() {
var a: String? = null
var b: String? = "Kotlin"
// a가 null임으로 스코프 함수 내의 구문이 동작하지 않음.
a?.run {
println(toUpperCase())
println(toLowerCase())
}
b?.run {
println(toUpperCase())
println(toLowerCase())
}
}