본문 바로가기

# 02/코틀린

[Kotlin] 변수의 null

반응형

NPE(NullPointerException)

사용할 수 없는 null인 변수에 접근하면서 발생하는 예외


코틀린의 변수 선언은 기본적으로 null을 허용하지 않는다.

val a : Int = 30

val b : String = "Hello"


null 가능한 선언

val a : Int? = null

val b : String? = null



var str1 : String = "Hello Kotlin"

str1 = null                                 // null을 허용하지 않음 (오류 발생!)


var str1 : String? = "Hello Kotlin"

str1 = null                                 // null을 허용. 오류 발생하지 않음!




fun main() {

var str1 : String? = "Hello World"

str1 = null

println("str1: $str1 length: ${str1.length}")    // null을 허용하면 length가 실행될 수 없음.


세이프 콜(Safe-call) - 선호함

 str1?.length

 - str1이 null인 경우 null은 반환하고 null이 아닌 경우 length 실행


non-null 단정 기호 - 최대한 회피하도록! NPE 발생함!

 str1!!.length

 - null 이 아니라고 단정짓는 경우임. 컴파일러가 null 검사 없이 무시한다. 따라서 변수에 null이 할당되어 있어도 컴파일은 잘 진행된다. (코드 입력상 빨간 줄 안뜸) 하지만 실행중에 NPE 발생한다.


조건문 사용(if와 else의 활용)

fun main() {

var str1 : String? = "Hello Kotlin"

str1 = null

// 조건식을 통해 null 상태 검사

val len = if (str1 != null) str1.length else -1

println( "str1: $str1 length: ${len}")

}


세이프 콜과 엘비스 연산자를 활용해 null을 활용 - 더 안전하게 사용하는 방법

str1?.length ?: -1


fun main() {

var str1 : String? = "Hello Kotlin"

str1 = null

println("str1: $str1 length: ${str1?.length ?: -1}")     // 세이프 콜과 엘비스 연산자 활용


// if와 else 사용한 것과 비슷함. null이 아니면 length 반환, null이면 -1 반환.

}



반응형

'# 02 > 코틀린' 카테고리의 다른 글

[Kotlin] 함수 선언하고 호출하기  (0) 2019.07.03
[Kotlin] 자료형 변환  (0) 2019.07.03
[Kotlin] 기본 연산자  (0) 2019.07.03
[Kotlin] 패키지  (0) 2019.07.03
[Kotlin] 변수와 자료형  (0) 2019.07.03