더북(TheBook)

2.8.1 널이 될 수 있는 타입 다루기

널이 될 수 없는 타입을 다룰 때는 NullPointerException이 발생하지 않는다. 반면에 널이 될 수 있는 타입을 다룰 때는 NullPointerException이 발생할 수 있다. 코틀린에서는 이 예외를 프로그래머가 처리해야만 하고, 처리하지 않으면 모든 책임을 프로그래머가 져야 한다. 다음 코드는 컴파일되지 않는다.

val s: String? = someFunctionReturningAStringThatCanBeNull()
val l = s.length

여기서는 NPE(NullPointerException)가 발생할 수 있어서 점(.) 연산자(역참조 연산자)를 사용할 수 없다. 그 대신 다음과 같이 작성해야 한다.

val s: String? = someFunctionReturningAStringThatCanBeNull()
val l = if(s != null) s.length else null

코틀린에서는 안전한 호출(safe call) 연산자 ?.로 이를 짧게 처리할 수 있다.

val s: String? = someFunctionReturningAStringThatCanBeNull()
val l = s?.length

코틀린이 l의 타입을 Int?로 추론한다는 점에 유의하라. 하지만 이 구문은 연쇄 호출할 때 더 유용하다.

val city: City? = map[companyName]?.manager?.address?.city
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.