[swift] unowned 참조 사용 예시

Swift는 참조 사이클을 방지하기 위해 weakunowned 키워드를 사용할 수 있습니다. 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 인스턴스가 해제되면서 런타임 에러 발생

위 예시에서 Apartmenttenant 속성을 unowned으로 선언했습니다. 따라서 Apartment가 해제될 때 tenant 역시 해제되므로 주의가 필요합니다.

이와 같이 unowned 참조는 강한 참조 사이클을 방지하고 메모리 누수를 방지하는데 도움을 줄 수 있습니다.

더 많은 정보를 원하시면, Swift 공식 문서를 참고하세요.