[swift] unowned 참조 사용 예시
Swift는 참조 사이클을 방지하기 위해 weak
나 unowned
키워드를 사용할 수 있습니다.
unowned
키워드는 항상 참조하는 대상이 존재한다고 가정하며, 참조 대상이 없을 경우 런타임 에러가 발생합니다.
class Person {
let name: String
var apartment: Apartment?
init(name: String) {
self.name = name
}
deinit {
print("\(name) is being deinitialized")
}
}
class Apartment {
let unit: String
unowned let tenant: Person
init(unit: String, tenant: Person) {
self.unit = unit
self.tenant = tenant
}
}
var john: Person?
var unit4A: Apartment?
john = Person(name: "John Appleseed")
unit4A = Apartment(unit: "4A", tenant: john!)
john?.apartment = unit4A
john = nil // Person 인스턴스가 해제되면서 "John Appleseed is being deinitialized" 출력
unit4A = nil // Apartment 인스턴스가 해제되면서 런타임 에러 발생
위 예시에서 Apartment
의 tenant
속성을 unowned
으로 선언했습니다.
따라서 Apartment
가 해제될 때 tenant
역시 해제되므로 주의가 필요합니다.
이와 같이 unowned
참조는 강한 참조 사이클을 방지하고 메모리 누수를 방지하는데 도움을 줄 수 있습니다.
더 많은 정보를 원하시면, Swift 공식 문서를 참고하세요.