🔥 옵셔널 체이닝을 통한 서브스크립트 접근

409자
6분

옵셔널 값에서 서브스크립트를 사용하여 값을 가져오거나 설정하고, 해당 서브스크립트 호출이 성공했는지 확인하기 위해 옵셔널 체이닝을 사용할 수 있습니다.

아래 예제는 Residence 클래스에 정의된 서브스크립트를 사용하여 john.residence 속성의 rooms 배열에서 첫 번째 방의 이름을 가져오려고 합니다. 현재 john.residencenil이기 때문에 서브스크립트 호출은 실패합니다:

if let firstRoomName = john.residence?[0].name {
    print("The first room name is \(firstRoomName).")
} else {
    print("Unable to retrieve the first room name.")
}
// "Unable to retrieve the first room name."이 출력됩니다.
swift

이 서브스크립트 호출에서 옵셔널 체이닝 물음표는 서브스크립트 대괄호 앞에 있는 john.residence 바로 뒤에 위치합니다. 왜냐하면 john.residence가 옵셔널 체이닝을 시도하는 옵셔널 값이기 때문이죠.

유사하게, 옵셔널 체이닝을 통해 서브스크립트로 새로운 값을 설정할 수도 있습니다:

john.residence?[0] = Room(name: "Bathroom")
swift

이 서브스크립트 설정 시도 역시 residence가 현재 nil이기 때문에 실패합니다.

만약 실제 Residence 인스턴스를 생성하고 john.residence에 할당하며, rooms 배열에 하나 이상의 Room 인스턴스가 있다면, 옵셔널 체이닝을 통해 Residence 서브스크립트를 사용하여 rooms 배열의 실제 항목에 접근할 수 있습니다:

let johnsHouse = Residence()
johnsHouse.rooms.append(Room(name: "Living Room"))
johnsHouse.rooms.append(Room(name: "Kitchen"))
john.residence = johnsHouse
 
if let firstRoomName = john.residence?[0].name {
    print("The first room name is \(firstRoomName).")
} else {
    print("Unable to retrieve the first room name.")
}
// "The first room name is Living Room."이 출력됩니다.
swift

옵셔널 타입의 서브스크립트 접근

만약 서브스크립트가 Swift의 Dictionary 타입의 키 서브스크립트와 같이 옵셔널 타입의 값을 반환한다면, 서브스크립트의 닫는 대괄호 뒤에 물음표를 붙여 반환값의 옵셔널을 체이닝합니다:

var testScores = ["Dave": [86, 82, 84], "Bev": [79, 94, 81]]
testScores["Dave"]?[0] = 91 // "Dave" 배열이 [91, 82, 84]로 업데이트됩니다.
testScores["Bev"]?[0] += 1 // "Bev" 배열이 [80, 94, 81]로 업데이트됩니다.
testScores["Brian"]?[0] = 72 // 아무 변화도 없습니다.
swift

위의 예제는 testScores라는 딕셔너리를 정의하는데, 이는 String 키를 Int 값의 배열에 매핑하는 두 개의 키-값 쌍을 포함하고 있습니다. 예제에서는 옵셔널 체이닝을 사용하여 "Dave" 배열의 첫 번째 항목을 91로 설정하고, "Bev" 배열의 첫 번째 항목을 1 증가시키며, "Brian" 키의 배열에서 첫 번째 항목을 설정하려고 시도합니다.

처음 두 호출은 testScores 딕셔너리에 "Dave""Bev" 키가 포함되어 있기 때문에 성공합니다. 세 번째 호출은 testScores 딕셔너리에 "Brian" 키가 포함되어 있지 않기 때문에 실패하게 됩니다.

이렇게 옵셔널 체이닝을 사용하면 안전하게 서브스크립트에 접근하고 값을 설정할 수 있습니다. 옵셔널 체이닝은 Swift에서 매우 강력하고 유용한 기능으로, 옵셔널 값을 다룰 때 코드의 가독성과 안정성을 크게 향상시켜 줍니다.

아래는 옵셔널 체이닝을 사용한 서브스크립트 접근의 프로세스를 나타내는 다이어그램입니다:

lecture image

이 다이어그램은 옵셔널 체이닝을 사용할 때 어떤 과정을 거치는지 명확하게 보여줍니다. 옵셔널 값이 nil이 아니라면 서브스크립트 호출이 이루어지고, 호출이 성공하면 래핑된 값이 반환되며, 실패하면 nil이 반환됩니다. 이런 과정을 통해 옵셔널 값을 안전하게 처리할 수 있게 되는 것이죠.