[swift] 옵셔널 체이닝을 사용한 옵셔널 타입 속성 감시자 활용

Swift에서 옵셔널 타입 속성을 가진 객체의 속성을 감시하고, 동시에 옵셔널 체이닝을 사용하기 위해서는 몇 가지 주의할 점이 있습니다. 이 글에서는 Swift에서 옵셔널 체이닝과 옵셔널 타입 속성 감시자를 함께 활용하는 방법을 살펴보겠습니다.

옵셔널 체이닝

옵셔널 체이닝은 옵셔널 타입 속성에 접근할 때, 값이 존재하는지 여부를 확인한 후에 접근하는 방법을 말합니다.

옵셔널 체이닝을 사용하면 간단하게 옵셔널 타입 속성에 접근하고, 값이 존재하지 않을 때 발생하는 런타임 에러를 방지할 수 있습니다.

class Person {
    var address: Address?
}

class Address {
    var city: String = "Seoul"
}

let person: Person? = Person()
let city = person?.address?.city // person이 nil이거나 address가 nil인 경우를 고려하여 city에 접근

옵셔널 타입 속성 감시자

옵셔널 타입 속성에 감시자를 추가하여 해당 속성의 값이 변경될 때 원하는 동작을 수행할 수 있습니다.

class UserProfile {
    var nickname: String? {
        didSet {
            print("닉네임이 변경되었습니다: \(nickname ?? "없음")")
        }
    }
}

let user: UserProfile = UserProfile()
user.nickname = "Swift User" // "닉네임이 변경되었습니다: Swift User"

옵셔널 체이닝과 옵셔널 타입 속성 감시자 함께 활용하기

옵셔널 체이닝을 사용할 때 옵셔널 타입 속성 감시자를 함께 활용하려면, 옵셔널 체이닝으로 접근한 속성에 직접 접근하는 것이 아니라, 값의 변경을 감지하기 위한 새로운 속성에 접근해야 합니다.

class Profile {
    var user: User?
    
    var userNickname: String? {
        didSet {
            print("사용자의 닉네임이 변경되었습니다: \(userNickname ?? "없음")")
        }
    }
}

let userProfile: Profile? = Profile()
userProfile?.user?.nickname = "Swift User" // 사용자의 닉네임이 변경되었습니다: Swift User
userProfile?.userNickname = userProfile?.user?.nickname

위와 같이 옵셔널 체이닝을 사용하여 속성에 접근하고, 그 값을 옵셔널 타입 속성 감시자를 활용하여 다룰 수 있습니다. 이를 통해 옵셔널 값의 변경을 안전하게 추적하고, 필요한 동작을 수행할 수 있습니다.

옵셔널 체이닝과 옵셔널 타입 속성 감시자를 조합하여 Swift 애플리케이션을 보다 안전하고 효율적으로 구현할 수 있습니다.