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 |