fun main() {
val favoriteActor = null
println(favoriteActor)
}
>> null
fun main() {
var favoriteActor: String = "Sandra Oh"
favoriteActor = null
}
Kotlin에서 null을 허용하는 변수를 선언하려면 유형 끝에 ? 연산자를 추가해야 합니다. 예를 들어 String? 유형은 문자열이나 null을 보유할 수 있는 반면 String 유형은 문자열만 보유할 수 있습니다. null을 허용하는 변수를 선언하려면 null을 허용하는 유형을 명시적으로 추가해야 합니다. null을 허용하는 유형이 없으면 Kotlin 컴파일러는 null을 허용하지 않는 유형이라고 추론합니다.
fun main() {
var favoriteActor: String? = "Sandra Oh"
println(favoriteActor)
favoriteActor = null
println(favoriteActor)
}
>> Sandra Oh
null
?. 안전 호출 연산자를 사용하면 null을 허용하는 변수에 더 안전하게 액세스할 수 있습니다. Kotlin 컴파일러가 null 참조에 관한 멤버 액세스 시도를 중지하고 액세스된 멤버의 null을 반환하기 때문입니다.
fun main() {
var favoriteActor: String? = "Sandra Oh"
println(favoriteActor.length)
}
fun main() {
var favoriteActor: String? = "Sandra Oh"
println(favoriteActor?.length)
}
>> 9
fun main() {
var favoriteActor: String? = null
println(favoriteActor?.length)
}
>> null
null이 아닌 !! 어설션은 이름에서 알 수 있듯이 변수의 값이 null이 아님(실제 여부에 관계없이)을 어설션합니다.
?. 안전 호출 연산자와 달리 null이 아닌 !! 어설션 연산자를 사용하면 null을 허용하는 변수가 실제로 null일 때 NullPointerException 오류가 발생할 수 있습니다. 따라서, 변수가 항상 null 비허용 변수이거나 적절한 예외 처리가 설정된 경우에만 실행해야 합니다. 적절히 처리되지 않으면 예외로 인해 런타임 오류가 발생합니다.
fun main() {
var favoriteActor: String? = "Sandra Oh"
println(favoriteActor!!.length)
}
>> 9
fun main() {
var favoriteActor: String? = null
println(favoriteActor!!.length)
}
?: Elvis 연산자는 ?. 안전 호출 연산자와 함께 사용할 수 있는 연산자입니다. ?: Elvis 연산자를 사용하면 ?. 안전 호출 연산자가 null을 반환할 때 기본값을 추가할 수 있습니다.
fun main() {
val favoriteActor: String? = "Sandra Oh"
val lengthOfName = favoriteActor?.length ?: 0
println("The number of characters in your favorite actor's name is $lengthOfName.")
}
>> The number of characters in your favorite actor's name is 9.
만약 favoriteActor 를 null로 바꾸면
The number of characters in your favorite actor's name is 0이라고 나온다