[swift] unowned 참조의 동작 방식
Swift에서는 강한 참조 사이클을 방지하기 위해 weak
와 unowned
키워드를 제공합니다. 이 문서에서는 unowned
참조의 동작 방식에 대해 알아보겠습니다.
unowned
키워드란?
unowned
키워드는 참조하는 객체가 해제되더라도 참조를 유지하는 것을 의미합니다. 이는 weak 참조와 달리 참조가 해제될 경우에는 자동으로 nil
로 설정되지 않습니다.
class Person {
let name: String
// unowned로 선언된 속성
unowned let car: Car
init(name: String, car: Car) {
self.name = name
self.car = car
}
}
class Car {
let model: String
init(model: String) {
self.model = model
}
}
var car: Car? = Car(model: "Tesla")
var person: Person? = Person(name: "John", car: car!)
// 참조 사이클 발생
car = nil
person = nil // 런타임 에러 발생
위의 예제에서 Person
클래스의 car
속성은 unowned
로 선언되어 있습니다. car
인스턴스가 제거되면 person
객체도 자동으로 제거될 것이라고 기대할 수 있지만, 실제로 person
을 해제할 때 런타임 에러가 발생합니다.
이는 unowned
참조가 참조하고 있는 객체가 이미 제거된 상태에서 참조를 해제하려고 할 때 발생하는 문제입니다.
사용 시 주의할 점
unowned
참조는 참조하고 있는 객체가 필요한 동안만 유효한 경우에만 사용해야 합니다. 만약 참조하고 있는 객체가 이미 제거된 상태에서 참조를 해제하려고 하면 런타임 에러가 발생합니다.
따라서 unowned
참조를 사용할 때에는 해당 참조가 항상 유효한지 신중하게 검사해야 합니다.
요약
unowned
참조는 참조하고 있는 객체가 이미 제거된 상태에서 참조를 해제하려는 경우에 주의해야 합니다. 항상 참조의 유효성을 확인하는 것이 중요합니다.