반응형
fun main( ) {
var str1: String = "Hello World!"
str1 = null //오류! null을 처리할 수 없다.
println("str1: $str1")
}
실행 결과
Error: Kotlin: Null can not be a value of a nonnull type String
이렇듯 단순 null을 삽입하여 처리 불가하다.
null 처리하기
fun main() {
var str1 : String? = "Hello World!"
str1 = null
println("str1: $str1")
}
실행 결과
str1: null
null을 처리하기 위해 자료형 뒤에 ?를 붙혔다.
세이프 콜과 NPE 강제 발생
fun main() {
var str1 : String? = "Hello World!"
str1 = null
println("str1: $str1 length: ${str1.length}") //null을 허용하면 length가 실행될 수 없다.
// 세이프 콜 활용
println("str1: $str1 length: ${str1?.length}") // str1이 null 값이기에 length값을 읽지 않고 넘어간다.
// NPE 강제 발생
println("str1: $str1 length: ${str1!!.length}") // non-null을 강제 발생시켜 length값을 읽어낸다.
// 조건식을 통해 null 상태 검사
val len = if (str1 != null) str1.length else -1
println("str1: $str1 length: ${str1.length}")
}
정리 : 세이프 콜 (.?)은 앞의 값이 null일 때 읽지 않고 넘어간다. NPE 강제 발생 (!!.)은 강제로 null이 아님을 발생하여 읽어낸다.
세이프 콜과 엘비스 연산 활용
fun main() {
var str1 : String? = "Hello World!"
str1 = null
println("str1: $str1 length: ${str1?.length ?: -1}") // 세이프 콜과 엘비스 연산 활용
// 엘비스 연산이란 (a ?: b)으로
// a가 true (non-null) 이면 a, false (null) 이면 b를 선택하는 연산
}
실행 결과
str1: null length: -1
728x90
반응형
'App > Kotlin' 카테고리의 다른 글
[Kotlin] 함수 표현법 (1) (0) | 2020.09.05 |
---|---|
[Kotlin] 문자열 자료형 (0) | 2020.08.17 |
[Kotlin] 사용자 클래스 가져오기 (0) | 2020.08.17 |
[Kotlin] math 패키지 사용하기 (0) | 2020.08.17 |
[Kotlin] 기본 패키지 사용하기 및 출력하기 (0) | 2020.08.17 |