[swift] weak 참조의 옵셔널 체이닝

Swift는 강력한 참조와 약한 참조를 지원하여 메모리 관리를 돕습니다. 또한 옵셔널 체이닝을 통해 안전하게 프로퍼티나 메소드에 접근할 수 있습니다. 이번에는 weak 참조를 사용할 때의 옵셔널 체이닝에 대해 알아보겠습니다.

weak 참조란?

weak 키워드는 참조 사이클을 예방하기 위해 사용됩니다. 보통 객체들이 서로를 강한 참조할 경우, 메모리 누수가 발생할 수 있습니다. 그래서 weak 참조를 사용하여 객체가 서로를 강한 참조하지 않도록 합니다.

weak var someObject: SomeClass?

옵셔널 체이닝과 weak 참조

옵셔널 체이닝을 사용하여 weak 참조를 안전하게 접근할 수 있습니다. 옵셔널 체이닝을 사용하면, 체이닝 중 하나의 프로퍼티나 메소드가 nil이라면 바로 nil을 반환하고, 그렇지 않으면 계속해서 체이닝을 진행합니다.

class Person {
    weak var dog: Dog?
}

class Dog {
    func sleep() {
        print("The dog is sleeping")
    }
}

let person = Person()
if let dog = person.dog, let resting = dog.sleep() {
    // dog와 resting 둘 다 nil이 아니면 실행
}

위의 예제에서 personDog에 대한 weak 참조를 갖고 있습니다. person.dog?.sleep()를 통해 옵셔널 체이닝을 하여 sleep() 메소드에 안전하게 접근할 수 있습니다.

결론

weak 참조를 옵셔널 체이닝과 함께 사용하면 메모리 관리와 코드 안정성을 동시에 유지할 수 있습니다. 약한 참조를 사용할 때는 언제나 옵셔널 체이닝을 고려해보는 것이 좋습니다.

참고 자료: Swift 공식 문서