-
[Kotlin] Null SafetyKotlin 2019. 5. 31. 01:12
Kotlin의 매력 중 하나인 Null Safety에 대하여 정리해보자.
■ ?
Null을 값을 가능케 하는 Null Safety이다.
fun testNull(){ val nullableString : String? = null //널 허용 val notNullabeString : String = null //널 허용불가. }
nullableString 변수는 String Type뒤에? 가 붙으면서 null 이 가능하다.
nonNullableString 변수는 기존 자바 String이 같이 null이 불가능하다.
■ ?:
Null 값을 대신할 수 있는 Elvis Operator 이다.
fun main(){ val hi = "hi" val num = 12345 val elivis_String : String? = if(hi!=null)"notnull" else "null" val elvis_Int : Int? = if(num!=null) num.plus(5) else -1 val elvis_short = elivis_String?:null }
Elvis Operator는 null 이 아닐 때의 값과 null 일 때 반환 값을 정해 놓을 수 있다.
elvis_String을 보면 null이 아니면 "notnull" 아니면 "null"을 표현하는 것처럼
(! null 일 때의 처리 )?: (null일 때의 처리)라고 생각하면 이해하기 쉬울 것이다.
■ ?.
Null 값 확인과 처리를 한 번에 할 수 있다.
elvis_short?.let { print("I'm not null") }?: run { print("I'm null") }
?. let { } // 괄호 람다 안 표현식은 elivis_short가 null이 아닐 때 호출된다.
?: run { }// 괄호 람다 안 표현식은 elvis_short가 null 이면 "I'm null"을 호출할 것이다.여담으로 코틀린에서는 자동적으로 notnull인지 체크하는 부분이 STL로 구현되어있다.
checkNotNull(elvis_short)
■ !!
널을 허용하지 않는다.
val str : String? = "Null expression is possible" val lenth = str!!.length
str은 nullable이 가능한 변수다.
그런데 length라는 변수는 str이 날이 아닐 때만 length를 나타내 주겠다는 의미이다.
이 경우 만약 str이 널 값이 오게 될 경우 NullPointException이 나올 수 있다.
그렇기에!!(널값 허용 x) 비 널값 중첩을 사용할 때는 이점을 주의해야 한다.
LIST'Kotlin' 카테고리의 다른 글
[Kotlin] Data Class (0) 2020.04.28 [Kotlin]FoldRight && Fold (0) 2019.12.27 [Kotlin] Reference and Reflection (0) 2019.10.22 Kotlin in Action - Lamda (0) 2019.09.24 [Kotlin]Basic Types (0) 2018.09.21