Home
Kotlin
Koltin - Null safety (Nullable types and Non-null types)
devfoxstar
devfoxstar
January 24, 2023
1 min

Table Of Contents

01
Non-null, Nullable
02
타입 제약
03
Smart Cast
04
Non-null 연산자
05
Elvis 연산자

Java에서 자주 문제가 되는 오류가 바로 NPE(NullPointerException)입니다.
NPE 오류가 문제인 이유는 컴파일은 정상 처리되고, 런타임 중에 오류가 발생하기 때문입니다.

즉, 사용 중에 오류를 발견하기 때문에 장애의 주요 요인으로 꼽히고 있습니다.

KotlinJava의 고질적인 문제인 NPE 오류를 방지하기 위해 Null 타입을 제어할 수 있습니다.
예제를 통해서 하나씩 확인해 보겠습니다.

Non-null, Nullable


var s: String = "abc"   //기본은 non-null
a = null                //non-null 타입에 null 값을 넣으면 컴파일러에서 오류 발생
var s: String? = "abc"  //nullable
b = null                //null이 허용 되므로 정상 처리

타입 제약


var s: String? = null
if (s.isEmpty()) print ("Empty string")       //nullable 타입이므로 isEmpty() 호출 불가 오류 발생
var s: String? = null
for (ch in s) {         //nullable 타입에는 iterator() 메서드가 없어서 오류 발생
    print(ch) 
}
var s: String? = null
print(s + "!")          //문자열을 이어주는 연산은 허용

Smart Cast


nullable 타입이지만 null 체크를 하면, 컴파일러가 이후 코드부터는 non-null 타입으로 인식합니다.
Kotlin의 이 기능을 Smart Cast라고 합니다.

fun checkEmpty(s: String?): Boolean {
    if (s == null) return false     //Smart Cast
    if (a.isEmpty()) return false   //더 이상 오류가 발생하지 않음

    return true
}
val n: Int? = 0

when (n) {
    null -> "null"              //Smart Cast
    in 0..9 -> "1"
    in 10..99 -> "10"
    in 100..999 -> "100"
    else -> "over"
}
val s: String? = "abc"
val l: String? = if (s != null) s.length else 0         //Smart Cast

Non-null 연산자


!! 연산자 혹은 Non-null 연산자입니다.
해당 연산자를 사용하면 값은 null이 될 수 없습니다.

만약 null 값이 들어오면 NPE 오류가 발생합니다.

val s: String? = "abc"
val l: Int = s!!.length
val s: String? = null
val l: Int = s!!.length     //NPE 오류 발생

Elvis 연산자


?: 연산자 혹은 null 복합 연산자입니다.
엘비스 프레슬리 머리 모양 같다고 해서 보통 엘비스 연산자라고 부릅니다.

해당 연산자를 사용하면 null을 대신할 기본값을 지정할 수 있습니다.

Elvis

val s: String? = "abc"
val l: Int = s?.length ?: 0

Non-Elvis

val s: String? = "abc"
val l: Int = if (s != null) s.length else 0

Tags

#Kotlin#Nullsafety#Nullable

Related Posts

Kotlin - invoke 함수
May 29, 2023
1 min
© 2024, All Rights Reserved.

Quick Links

About Me

Media