kotlin

[코틀린]NULL값 다루기

LimeCoding 2022. 7. 27. 16:58

코틀린의 NULL


코틀린의 장점중 하나는 null로 인한 오류를 방지할 수 있다는 점이다. 그러면 null을 어떻게 사용하는지 알아보자.

코틀린에는 변수에 null을 허용하기 위해선 ?를 사용해야 한다. 다음은 null 허용과 비허용의 예시이다.

fun main() {
    var nameNotNull = null // 이 문장은 null을 허용하지 않으므로 오류 발생
    var nameNull? = null // ?가 있으므로 오류가 발생하지 않음
    println("$nameNull") // 결과 : null
}

첫 번째 줄은 ? 기호가 없기 때문에 null을 할당하면 오류가 발생하지만 두 번쨰 줄은 null을 허용하므로 오류가 발생하지 않는다. 코틀린에서는 이런 방식으로 null이 들어갈 수 있는 변수와 들어가지 못하는 변수를 구분해 준다.

 

세이프 콜과 non-null 단정 기호, 엘비스 연산자


코틀린으로 프로그래밍을 하다 보면 앞에서 null을 허용한 변수에 접근해야 하는 일이 생긴다. 이때 null에 접근을 하면 당연하겠지만 에러가 생긴다. 하지만 프로그래머는 이 사실을 쉽게 알기 힘들다. 이런 일을 방지하기 위해 코틀린에서는 세이프콜과 non-null 단정 기호를 지원한다.

 

세이프 콜

세이프 콜은 "?."로 표현한다. 세이프 콜을 사용해 null 변수에 접근하면 변수가 null인지 아닌지 검사한 후 접근한다.

다음은 세이프 콜의 사용 예시이다.

var str1: String? = "Hello World!"
    str1 = null

    //"?." 세이프 콜 연산
    println("str1: ${str1?.length}")

non-null 단정 기호

non-null 단정 기호는 "!!"로 표현한다. non-null 단정 기호는 !!이 붙은 변수를 non-null 타입으로 바꿔준다.만약 이 변수가 null을 가지고 있다면 NPE(Null Pointer Error)를 발생하고 그렇지 않다면 정상적인 값을 준다. 다음은 !!의 사용 예시이다.

 //"!!" non-null 단정 기호
    println("str1: ${str1!!.length}")

!!의 에러 발생 타이밍은 컴파일을 할 때이다. 즉 우리가 IDE에서 작성을 하고 있는 동안에는 문제가 없지만 컴파일을 하게 되면 !!에 의해 NPE가 발생하고 컴파일을 중단된다.

 

엘비스 연산자

엘비스 연산자는 ?:로 표현된다. 접근하는 변수가 null인지 아닌지 판단하여 null이면 엘비스 연산자 기준 오른쪽을 수행하고 반대면 왼쪽을 수행한다. 다음은 엘비스 연산자 예시이다.

var str1: String? = "Hello World!"
    println("str1: ${str1?.length ?: "it's null"}") // 오른쪽 수행

 

'kotlin' 카테고리의 다른 글

[코틀린] is, as 키워드  (0) 2022.07.27
[코틀린] 자료형과 변수  (0) 2022.07.27
[코틀린] 패키지란 무엇인가?  (0) 2022.07.27
코틀린이란?  (0) 2022.01.31
코틀린으로 Hello world를 찍어보자  (0) 2022.01.31