🔥 옵셔널 체이닝과 옵셔널 반환 값

271자
4분

이전 예제에서는 옵셔널 체이닝을 통해 옵셔널 타입의 속성 값을 검색하는 방법을 보여주었습니다. 그런데 알고 계셨나요? 옵셔널 체이닝을 사용하여 옵셔널 타입의 값을 반환하는 메서드를 호출하고, 필요한 경우 해당 메서드의 반환 값에 대해 체이닝을 수행할 수도 있답니다.

아래 예제를 한번 살펴볼까요? 여기서는 옵셔널 체이닝을 통해 Address 클래스의 buildingIdentifier() 메서드를 호출하고 있습니다. 이 메서드는 String? 타입의 값을 반환하는데요. 위에서 설명한 대로, 옵셔널 체이닝 후 이 메서드 호출의 최종 반환 타입 역시 String?이 됩니다.

swift
if let buildingIdentifier = john.residence?.address?.buildingIdentifier() {
    print("John's building identifier is \(buildingIdentifier).")
}
// "John's building identifier is The Larches."가 출력됩니다.
swift
if let buildingIdentifier = john.residence?.address?.buildingIdentifier() {
    print("John's building identifier is \(buildingIdentifier).")
}
// "John's building identifier is The Larches."가 출력됩니다.

위 코드를 자세히 살펴보면:

  1. john.residence는 옵셔널 Residence 인스턴스입니다.
  2. john.residence?.address는 옵셔널 체이닝을 사용하여 john.residence가 존재하는 경우 address 속성에 접근합니다.
  3. john.residence?.address?.buildingIdentifier()address가 존재하는 경우 buildingIdentifier() 메서드를 호출합니다.
  4. if let 구문은 buildingIdentifier() 메서드의 반환 값이 nil이 아닌 경우에만 buildingIdentifier 상수에 값을 할당합니다.

이 메서드의 반환 값에 대해 추가적인 옵셔널 체이닝을 수행하고 싶다면, 메서드의 괄호 뒤에 옵셔널 체이닝 물음표를 배치하면 됩니다.

swift
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
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"."가 출력됩니다.

위 코드의 동작 방식을 자세히 살펴보면:

  1. buildingIdentifier() 메서드가 반환한 String? 값에 대해 hasPrefix(_:) 메서드를 호출합니다.
  2. hasPrefix(_:) 메서드는 String 타입에 정의되어 있으므로, 옵셔널 체이닝은 buildingIdentifier() 메서드의 반환 값을 자동으로 언래핑합니다.
  3. if let 구문은 hasPrefix(_:) 메서드의 반환 값이 true인 경우에만 beginsWithThe 상수에 true를 할당합니다.
  4. 내부 if 구문은 beginsWithThe 값에 따라 적절한 메시지를 출력합니다.

이렇게 옵셔널 체이닝을 사용하면 깔끔하고 간결한 코드를 작성할 수 있습니다. nil 검사와 언래핑을 명시적으로 수행하지 않아도 되니까요. 메서드의 반환 값이 옵셔널 타입인 경우에도 마찬가지입니다.

YouTube 영상

채널 보기
AI를 위한 선형대수학 - 행렬은 공간을 바꾼다
AI를 위한 선형대수 - 전단, 행렬식, 변환의 핵심
AI에서 코사인 유사도가 중요한 이유
예시 100개도 왜 증명이 아닐까? 증명과 명제 이야기 | MIT 컴퓨터 과학을 위한 수학
AI를 위한 선형대수 - 신경망의 선형 결합
AI에서 선형대수가 중요한 이유
모순과 귀닙법 | MIT 컴퓨터 과학을 위한 수학
AI를 이해하는 첫걸음, 선형대수학