본문 바로가기
컴퓨터 언어/Kotlin

[Kotlin] null 가능성 체크 (엘비스 연산자, !!, ?)

by 웅대 2022. 11. 29.
728x90
반응형

null 이라는 것은 어떠한 값도 존재하지 않는다는 뜻이다.

 

코틀린에서는 이러한 null 체크에 대한 방법들을 제공하고 null 가능성을 처리하는 것이 중요하다.

 

NullPointerException을 방지하기 위해서 코틀린에서는 애초에 일반적인 자료형은 null이 될 수가 없도록 되어있다.

 

null을 사용하기 위해서는 자료형 뒤에 물음표를 붙여야 한다.

 

fun plusTen(n:Int?):Int{
    return n+10
}

위의 함수는 파라미터 값으로 null을 허용한 상태이다.

 

그런데 파라미터에 null을 허용한 경우 반드시 null 예외처리를 해줘야 한다.

 

위 함수를 작성해보면 null 예외 처리를 하지 않았기 때문에 에러가 발생한다.

 

아래와 같이 함수가 실행되자마자 바로 null 체크를 하고 그 다음에 함수 내용을 작성해야한다.

fun plusTen(n:Int?):Int{
    if(n==null) return -1
    return n+10
}

에러가 없이 작동하는 모습을 확인할 수 있다.

 

 

엘비스 연산자

코틀린에서는 null 값 처리를 위한 엘비스 연산자라는 일종의 조건문이 존재한다.

 

엘비스 연산자를 사용하면 간편하게 null 값을 처리할 수 있다.

 

위의 plusTen 함수를 엘비스 연산자를 사용하여 구현해보겠다.

 

fun plusTen(n:Int?):Int{
    return n?.toInt()?:-1
}

?. 다음에 오는 것은 n이 null이 아닐때에만 실행이 되고 만약 n이 null일 경우 ?: 뒤에 오는 코드를 실행한다.

 

설명해보자면 n이 null이라면 -1을 반환하고 n이 null이 아닐때만 Int형으로 바꾸어서 반환하라

 

라는 뜻이 된다.

 

엘비스 연산자는 일종의 조건문이기 때문에 throw 같은 구문도 사용할 수 있다.

 

!!

코틀린에는 !! 연산자가 존재한다.

 

이것은 우리가 직접 null이 될 수 없다고 지정해주는 것이다.

 

코드를 짜다보면 변수의 null 가능성 여부를 체크하라는 에러가 뜰 때가 있다.

 

이럴 때는 엘비스 연산자를 사용하곤 하는데 우리는 그 값이 null이 될 수 없음을 알고 있다고 해보자.

 

그럴 경우 !!를 사용하여 이 값은 절대 null이 아니라고 알려줄 수 있다.

 

 

fun plusTen(n:Int?):Int{
    return n!!.toInt()
}

위 함수의 return의 경우 n이 null이 될 수 없음을 알려주었기 때문에 에러가 발생하지 않는다.

 

그러나 이는 우리가 null이 아닌 값만 파라미터를 전달해주었을 때이고 실수로 null값을 파라미터로 전달해준다면 NullPointerException 에러가 발생한다.

 

정말 필요할 때에만 사용하는 것이 좋다.

728x90
반응형

댓글