[swift] 옵셔널 체이닝

옵셔널 체이닝은 스위프트의 특징 중 하나로, 옵셔널 값에 접근할 때 발생할 수 있는 nil 값을 처리하는 간편한 방법입니다. 옵셔널 체이닝을 사용하면 중첩된 옵셔널 값에 안전하게 접근할 수 있으며, 한 번의 nil 체크로 여러 단계의 옵셔널 값을 처리할 수 있습니다.

옵셔널 체이닝 문법

옵셔널 체이닝은 점(.) 연산자를 사용하여 구현됩니다. 체인 내의 각 단계에서 옵셔널 값이 존재하는지 확인하며, 옵셔널 값이 nil이면 이어지는 단계로 이동하지 않고 바로 nil을 반환합니다.

optionalValue?.property
optionalValue?.method()

위와 같은 형식으로 옵셔널 값의 프로퍼티에 접근하거나 메서드를 호출할 수 있습니다. 체인 내의 어느 단계에서라도 옵셔널 값이 nil이면, 전체 체인은 nil이 됩니다.

예제

예제를 통해 옵셔널 체이닝의 동작을 살펴보겠습니다.

class Person {
    var name: String
    var residence: Residence?
    
    init(name: String) {
        self.name = name
    }
}

class Residence {
    var address: Address?
    
    init(address: Address) {
        self.address = address
    }
}

struct Address {
    var street: String
}

let john = Person(name: "John")

if let street = john.residence?.address?.street {
    print("John's street is \(street)")
} else {
    print("Unable to retrieve street information.")
}

위의 코드에서 john이라는 Person 인스턴스는 residence 프로퍼티를 가지고 있으며, residenceaddress를 가진 Residence 인스턴스를 가리킵니다. 이때, addressstreet 프로퍼티에 접근하기 위해 옵셔널 체이닝을 사용합니다.

옵셔널 체이닝을 통해 john.residence?.address?.street처럼 프로퍼티에 접근하게 되면, residence가 nil이라면 바로 nil을 반환하고, address가 nil이라면 역시 nil을 반환합니다. 따라서 위 예제에서는 “Unable to retrieve street information.”가 출력됩니다.

결론

옵셔널 체이닝은 스위프트에서 옵셔널 값을 안전하게 다룰 수 있도록 도와줍니다. 중첩된 옵셔널 값에 접근하는 경우에 효과적으로 사용할 수 있으며, nil 체크를 간단하게 처리할 수 있습니다.