더북(TheBook)

호출을 연쇄시키는 중간에 null이 결과로 나올 수 있는데, 최종 결과에만 관심이 있는 경우 안전한 호출을 사용하면 여러 호출을 간결하게 연쇄시킬 수 있다.

SafeCallsAndElvis/ChainedCalls.kt

package safecalls
import atomictest.eq

class Person(
  val name: String,
  var friend: Person? = null
)

fun main() {
  val alice = Person("Alice")
  alice.friend?.friend?.name eq null // [1]
  val bob = Person("Bob")
  val charlie = Person("Charlie", bob)
  bob.friend = charlie
  bob.friend?.friend?.name eq "Bob"  // [2]
  (alice.friend?.friend?.name
    ?: "Unknown") eq "Unknown"       // [3]
}

안전한 호출을 사용해 여러 멤버에 대한 접근을 연쇄시키는 경우 중간에 어느 하나라도 null을 내놓으면 전체 결과가 null이 된다.

[1] alice.friend 프로퍼티가 null이므로 나머지 호출도 null을 돌려준다.

[2] 모든 중간 단계 호출이 의미 있는 값을 내놓는다.

[3] 안전한 호출을 연쇄시킨 뒤에 엘비스 연산자를 붙여서 연쇄 중간에 null이 반환된 경우에 대한 대안값을 지정한다.

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