호출을 연쇄시키는 중간에 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이 반환된 경우에 대한 대안값을 지정한다.

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