Kotlin (코틀린)
Kotlin in A..Z (4) - null
강태종
2020. 7. 10. 18:32
- null이란
null이란 아무것도 없는 상태를 의미한다.
0 과 null의 차이점은 0은 0이라는 값을 저장한 상태지만 null은 저장한 값이 없는 상태이다.
- 변수에 null 할당하기
변수에 null을 할당하려면 자료형 뒤에 ?를 붙이면 된다.
val str1:String = null // 일반적인 변수에는 null을 저장할 수 없음
// Error : Null can not be a value of a non-null type String
val str2:String? = null // null을 저장하려면 자료형 뒤에 '?'을 붙이면 된다.
여기서 String과 String?은 서로 다른 자료형인걸 주의하자.
예제
코드
val str1:String? = null
println("str1 is $str1")
결과
str1 is null
- null체크
Kotlin에서 null을 허용한 자료형을 사용할 때는 항상 null 체크를 해야한다.
val str1:String? = null
println("str1 len : ${str1.length}") // null체크를 하지 않았기 때문에 Error
// Error Only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type String?
조건문
if문으로 null인지 아닌지 검사를 하는 방식이다.
코드
val str1:String? = null
if(str1 == null) {
println("str1 is null")
}
else {
println("str1 len : ${str1.length}")
}
val str2:String? = "개발일지"
if(str2 == null) {
println("str2 is null")
}
else {
println("str2 len : ${str2.length}")
}
결과
str1 is null
str2 len : 4
Safe Call
variable?.member 형식으로 ?로 멤버를 접근하는 방식이다.
null값이 저장되어 있으면 null을 반환한다.
코드
val str1:String? = null
println("str1 len : ${str1?.length}")
val str2:String? = "개발일지"
println("str2 len : ${str2?.length}")
결과
str1 len : null
str2 len : 4
Not null 단정
variable!!.member 형식으로 !!로 멤버를 접근하는 방식이다.
null값이 저장되어 있으면 NullPointException을 throw한다.
코드
val str1: String? = null
println("str1 len : ${str1!!.length}")
결과
Exception in thread "main" kotlin.KotlinNullPointerException
at MainKt.main(main.kt:3)
at MainKt.main(main.kt)
코드
val str1: String? = "개발일지"
println("str1 len : ${str1!!.length}")
결과
str1 len : 4
엘비스 연산자
표현식1 ?: 표현식2 형식으로 표현식1이 null이면 표현식2를 반환한다.
코드
val str1:String? = null
println("str1 len : ${str1?.length ?: 0}")
val str2:String? = "개발일지"
println("str2 len : ${str2?.length ?: 0}")
결과
str1 len : 0
str2 len : 4