언어(Programming Language)/Kotlin

[Kotlin] Kotlin에서 Null처리 방법(null & not-null, 안전 호출, 엘비스 연산자 )

RyanSin 2021. 2. 28. 13:25
반응형

- 개요

안녕하세요. 이번 시간에는 코틀린에서 자주 사용되는 Null처리 방법에 대해 알아보겠습니다.

 

자바와 다르게 코틀린은 null에 대해 엄격합니다. 자바 언어를 활용해 개발을 하시던 분들은 NullPointException을 가장만이 접했을 거라 생각이 듭니다.

 

코틀린은 NullPointException을 방지하기 위해 많은 노력을 했습니다. 지금부터 하나씩 알아보도록 하겠습니다.

 

- Null 허용 & Not-Null 미허용

코틀린에서 Null 값을 허용하는 방법은 ?(물음표)를 붙여 명시적으로 선언하는 방식입니다.

 

fun main(){
    
    //?(물을표)를 사용해서 null 값을 허용
    var name:String? = null

    println(name)
    
    /**
     * 실행 결과
     * 
     * null
     */
}

자바에서는 NullPointException이 발생했다면 코틀린에서는 사용이 가능합니다.

 

그럼 반대로 null을 무조건 허용하지 않겠다고 선언하는 방법은!!(느낌표 두 개)로 표시합니다.

 

fun main(){

    var name:String = "개발이 취미인 사람"

    var nickName = name!! // !! name 변수는 절대 null 값이 아니기 때문에 not-null 연산자로 보장합니다

    println(nickName)

    /**
     * 실행 결과
     *
     * 개발이 취미인 사람
     */
}

 

- 안전 호출 연산자 & 엘비스 연산자

자바에서 null 값을 예외처리를 할 때 if 조건문을 사용해서 처리를 했습니다.

int count = 0

if(count != null){
  // null 값이 아니면 실행된다.
}

코틀린에서는 조금 더 간결하게 null을 처리할 수 있습니다.

 

그때 사용되는 연산자는 안전 호출 연산자와 엘비스 연산자입니다.

 

안전 호출 연산자

사용법 : 연산자 좌측이 null인 경우 null을 반환, 그렇지 않다면 오른쪽 식의 결과 값을 반환

 

안전 호출 연산자는 보통 클래스 인스턴스의 변수나 함수를 참조하거나 함수를 실행할 때 사용됩니다.

 

fun main(){

    var name:String? = null

    println(name?.length)

    var nickName:String = "개발이 취미인 사람"

    println(nickName?.length)

    /**
     * 실행 결과
     * 
     * null
     * 10
     */
}

 

엘비스 연산자

사용법 : 첫 번째 연산자 ?: 두 번째 연산자

첫 번째 연산자가 값이 있다면 해당 값을 반환, 만약 그렇지 않다면 두 번째 연산자를 반환

만약 두 번째 연산자도 값이 없는 Null 타입이라면 다음 연산자로 계속 이어진다.

 

fun main(){

    var name:String? = null

    var nickName:String? = null

    var lastName = name?:nickName?:"둘 다 null 값 이구나"

    println(lastName)
    
    /**
     * 실행 결과
     *
     * 둘 다 null 값 이구나
     */
}

필요에 따라 두 연산자를 응용해서도 사용할 수 있습니다.

 

실습을 통해 직접 확인해보세요. 그래야 기억에 남습니다. :)