세이프 콜 (?.) : null이 할당되어 있을 가능성이 있는 변수를 검사하여 안전하게 호출하도록 도와주는 기법
fun main() {
var str1 : String? = "Hello Kotlin"
str1 = null
//str1이 null인 경우 => str1?.length 자리에 "null" 출력
println("str1: $str1 length: ${str1?.length}")
//str1이 null이 아닌 경우 => str1?.length 자리에 해당 수 출력
str1 = "hello my"
println("str1: $str1 length: ${str1?.length}")
var str1 : String? = "Hello Kotlin"
str1 = null
//str1이 null인 경우 => str1?.length 자리에 "null" 출력
println("str1: $str1 length: ${str1?.length}")
//str1이 null이 아닌 경우 => str1?.length 자리에 해당 수 출력
str1 = "hello my"
println("str1: $str1 length: ${str1?.length}")
}
non-null (!!.) : 변수에 할당된 값이 null이 아님을 단정하므로 컴파일러가 null검사없이 무시
* 변수에 null이 포함되어 있을 경우 컴파일은 잘 진행됨. 그러나 실행 중에 NPE를 발생시킴
엘비스 연산자 (?:) : 변수가 null인지 아닌지 검사하여 null이 아니라면 왼쪽 식을 그대로 실행하고 null이라면 오른쪽 식을 실행.
fun main() {
var str1 : String? = "Hello Kotlin"
str1 = null
var str1 : String? = "Hello Kotlin"
str1 = null
//세이프 콜과 엘비스 연산자 사용
println("str1: $str1 length: ${str1?.length ?: -1}") //코드a
}
println("str1: $str1 length: ${str1?.length ?: -1}") //코드a
}
str1이 null이면 str1.length 자리에 -1 출력
str1이 null이 아니면 str1.length 자리에 해당하는 수를 출력
세이프 콜과 엘비스 연산자를 사용하면 null인 경우 반환값을 -1과 같은 특정 값으로 대체함으로써 null 발생을 대비할 수 있으므로, 안전하고 가독성 좋은 코드로 표현 가능함.
'2023 여름방학 > Kotlin' 카테고리의 다른 글
[코틀린/kotlin] 참조형과 기본형 자료형 (0) | 2023.07.18 |
---|---|
[코틀린/kotlin] 주석처리 단축키 작동 안될때 (0) | 2023.07.16 |