Kotlin

Kotlin의 nullable변수 처리

예발이 2021. 9. 22. 22:00

코틀린에서는 null을 허용하는 nullable 변수가 별도로 존재한다.
이런 변수들을 일일이 if로 체크해서 로직을 하는 것은 아름답지 못할 수 있다.

다른 방법으로 null을 처리하는 방법을 알아보자.

 

Nullable 변수 처리

null을 처리하는 방법은 아래와 같이 몇가지가 있다

  • ?. (null safe operator)
  • ?: (elvis operator)
  • !!. (non-null assertion operator)

?. (null safe operater)

참조 연산자를 실행하기 전, 객체의 null 여부를 확인부터 하고 null이라면 뒤따라 오는 연산을 실행하지 않는 연산자

fun main() {        
    var a: String? = null
    
    println(a?.toUpperCase()) // 'null' 출력
}

?: (elvis operator)

객체가 null이 아니라면 그대로 사용하지만 null이라면 연산자 우측의 default 객체를 사용한다.

fun main() {        
    var a: String? = null
        
    println(a?:"default".toUpperCase()) // 'DEFAULT' 출력
}

!!. (non-null assertion operator)

참조 연산자를 사용 할때 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())
    }
}