NullPointerException은 코틀린으로 개발을 하다보면 흔하게 볼 수 있는 오류이다.
?.은 null 검사와 메서드 호출을 한번의 연산으로 수행한다.
호출하려는 값이 null이 아니라면 ?. 일반 메서드 호출처럼 작동하며, 호출하려는 값이 null이면 이 호출은 무시되고 null이 결과 값이 된다.
s?.toUpperCase()
// 위의 코드는 아래의 코드와 같다.
if(s != null) s.toUpperCase() else null
엘비스 연산자는 이항 연산자로 좌항을 계산한 값이 널인지 검사한다. 좌항 값이 null이 아니면 좌항 값을 결과로 하고, 좌항 값이 null이면 우항 값을 결과로 한다.
fun foo(s: String?) {
val t: String = s ?: "" // s가 null 이면 결과는 ""(빈문자열) 이다.
}
엘비스 연산자를 객체가 null인 경우 null을 반환하는 안전한 호출 연산자와 함께 사용해서 객체가 null인 경우에 대비한 값을 지정하는 경우가 많다.
fun Person.countryName() = company?.address?.country ?: "Unknown"
널 아닌 단언(not-null assertion)은 null이 될 수 잇는 타입의 값을 null이 될 수 없는 타입으로 강제로 바꿀 수 있다.
fun ignoreNulls(s: String?) {
val sNotNull : String = s!! // 예외가 발생하는 지점, 아래의 null
println(sNotNull.length) // 위에 !!가 있는 지점에서 발생한다는 점에 유의해야 한다.
}