더북(TheBook)

안전한 호출(safe call)은 일반 호출에 사용하는 점(.)을 물음표와 점(?.)으로 바꾼 것이다(물음표와 점 사이에 공백이 있으면 안 된다). 안전한 호출을 사용하면 널이 될 수 있는 타입의 멤버에 접근하면서 아무 예외(구체적으로는 NPE)도 발생하지 않게 해준다. 안전한 호출은 수신 객체가 null이 아닐 때만 연산을 수행한다.

SafeCallsAndElvis/SafeOperation.kt

package safecalls
import atomictest.*
fun String.echo() {
  trace(toUpperCase())
  trace(this)
  trace(toLowerCase())
}

fun main() {
  val s1: String? = "Howdy!"
  s1?.echo()                 // [1]
  val s2: String? = null
  s2?.echo()                 // [2]
  trace eq """
    HOWDY!
    Howdy!
    howdy!
  """
}

[1]에서는 echo()를 호출한 결과를 trace에 남긴다.

반면 [2]에서는 S2의 수신 객체가 null이므로 아무 일도 하지 않는다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.