🔥 옵셔널 체이닝과 옵셔널 반환 값
271자
4분
이전 예제에서는 옵셔널 체이닝을 통해 옵셔널 타입의 속성 값을 검색하는 방법을 보여주었습니다. 그런데 알고 계셨나요? 옵셔널 체이닝을 사용하여 옵셔널 타입의 값을 반환하는 메서드를 호출하고, 필요한 경우 해당 메서드의 반환 값에 대해 체이닝을 수행할 수도 있답니다.
아래 예제를 한번 살펴볼까요? 여기서는 옵셔널 체이닝을 통해 Address
클래스의 buildingIdentifier()
메서드를 호출하고 있습니다. 이 메서드는 String?
타입의 값을 반환하는데요. 위에서 설명한 대로, 옵셔널 체이닝 후 이 메서드 호출의 최종 반환 타입 역시 String?
이 됩니다.
if let buildingIdentifier = john.residence?.address?.buildingIdentifier() { print("John's building identifier is \(buildingIdentifier).") } // "John's building identifier is The Larches."가 출력됩니다.
swift
위 코드를 자세히 살펴보면:
john.residence
는 옵셔널Residence
인스턴스입니다.john.residence?.address
는 옵셔널 체이닝을 사용하여john.residence
가 존재하는 경우address
속성에 접근합니다.john.residence?.address?.buildingIdentifier()
는address
가 존재하는 경우buildingIdentifier()
메서드를 호출합니다.if let
구문은buildingIdentifier()
메서드의 반환 값이nil
이 아닌 경우에만buildingIdentifier
상수에 값을 할당합니다.
이 메서드의 반환 값에 대해 추가적인 옵셔널 체이닝을 수행하고 싶다면, 메서드의 괄호 뒤에
옵셔널 체이닝 물음표를 배치하면 됩니다.
if let beginsWithThe = john.residence?.address?.buildingIdentifier()?.hasPrefix("The") { if beginsWithThe { print("John's building identifier begins with \\"The\\".") } else { print("John's building identifier doesn't begin with \\"The\\".") } } // "John's building identifier begins with "The"."가 출력됩니다.
swift
위 코드의 동작 방식을 자세히 살펴보면:
buildingIdentifier()
메서드가 반환한String?
값에 대해hasPrefix(_:)
메서드를 호출합니다.hasPrefix(_:)
메서드는String
타입에 정의되어 있으므로, 옵셔널 체이닝은buildingIdentifier()
메서드의 반환 값을 자동으로 언래핑합니다.if let
구문은hasPrefix(_:)
메서드의 반환 값이true
인 경우에만beginsWithThe
상수에true
를 할당합니다.- 내부
if
구문은beginsWithThe
값에 따라 적절한 메시지를 출력합니다.
이렇게 옵셔널 체이닝을 사용하면 깔끔하고 간결한 코드를 작성할 수 있습니다. nil 검사와 언래핑을 명시적으로 수행하지 않아도 되니까요. 메서드의 반환 값이 옵셔널 타입인 경우에도 마찬가지입니다.