🔥 옵셔널 체이닝을 통한 속성 접근

328자
4분

이번 글에서는 옵셔널 체이닝을 통해 옵셔널 값의 속성에 접근하고, 접근 성공 여부를 확인하는 방법에 대해 알아보겠습니다.

강제 언래핑 대신 옵셔널 체이닝 사용하기에서 보여준 것처럼, 옵셔널 체이닝을 사용하면 옵셔널 값의 속성에 접근할 수 있고, 접근 성공 여부도 확인할 수 있어요.

먼저 앞서 정의한 클래스들을 이용해 Person 인스턴스를 생성하고, 이전처럼 numberOfRooms 속성에 접근해 보겠습니다.

let john = Person()
if let roomCount = john.residence?.numberOfRooms {
    print("John's residence has \(roomCount) room(s).")
} else {
    print("Unable to retrieve the number of rooms.")
}
// "Unable to retrieve the number of rooms." 출력
swift

john.residencenil이므로, 이 옵셔널 체이닝 호출은 이전과 동일한 방식으로 실패하게 됩니다.

옵셔널 체이닝을 통해 속성의 값을 설정하려고 시도할 수도 있어요.

let someAddress = Address()
someAddress.buildingNumber = "29"
someAddress.street = "Acacia Road"
john.residence?.address = someAddress
swift

이 예제에서는 john.residence가 현재 nil이므로, john.residenceaddress 속성 설정을 시도하는 것이 실패하게 됩니다.

할당은 옵셔널 체이닝의 일부이므로 = 연산자 오른쪽의 코드는 평가되지 않아요. 이전 예제에서는 상수에 접근하는 것이 어떤 부작용도 가지지 않기 때문에 someAddress가 결코 평가되지 않는다는 것을 알아차리기 쉽지 않습니다. 다음은 동일한 할당을 수행하지만, 주소를 생성하기 위해 함수를 사용해요. 함수는 값을 반환하기 전에 "Function was called"를 출력하므로, = 연산자의 오른쪽이 평가되었는지 여부를 볼 수 있습니다.

func createAddress() -> Address {
    print("Function was called.")
    // "Function was called." 출력
 
    let someAddress = Address()
    someAddress.buildingNumber = "29"
    someAddress.street = "Acacia Road"
 
    return someAddress
}
john.residence?.address = createAddress()
swift

아무것도 출력되지 않는 것으로 보아, createAddress() 함수가 호출되지 않는다는 것을 알 수 있습니다.

이렇게 옵셔널 체이닝을 활용하면 옵셔널 값의 속성에 안전하게 접근할 수 있고, 접근 성공 여부도 확인할 수 있습니다. 이를 통해 강제 언래핑으로 인한 런타임 에러를 방지할 수 있죠.

옵셔널 체이닝의 동작 방식을 이해하면 Swift 코드를 더욱 안전하고 견고하게 작성할 수 있게 됩니다. 옵셔널 값을 다룰 때는 항상 옵셔널 체이닝을 고려해 보세요. 이것이 Swift에서 권장하는 방식이랍니다! 😊

lecture image

위의 다이어그램은 Person 인스턴스에서 residenceaddress 속성에 접근하는 과정을 나타냅니다. 옵셔널 체이닝을 사용하면 중간에 nil 값이 있어도 안전하게 접근할 수 있어요. 이렇게 Swift의 옵셔널 체이닝은 우리 코드를 더욱 안전하고 읽기 쉽게 만들어 준답니다! 😄