개발일지

Kotlin in A..Z (4) - null 본문

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

 

'Kotlin (코틀린)' 카테고리의 다른 글

Kotlin in A..Z (6) - 연산자  (0) 2020.07.10
Kotlin in A..Z (5) - 자료형 비교, 검사, 변환  (0) 2020.07.10
Kotlin in A..Z (3) - 문자열  (0) 2020.07.08
Kotlin in A..Z (2) - 자료형  (0) 2020.07.08
Kotlin in A..Z (1) - 변수  (0) 2020.07.08
Comments