[swift] weak 참조와 unowned 참조

스위프트에서는 weakunowned 참조를 사용하여 객체 간의 강한 참조 순환을 피할 수 있습니다. 이러한 순환 참조는 메모리 누수를 초래할 수 있기 때문에 올바른 참조 타입을 선택하는 것이 중요합니다.

Weak 참조

weak 참조는 참조하고 있는 객체가 메모리에서 해제되었을 때 자동으로 nil로 설정됩니다. 이는 순환 참조를 방지하고 메모리 누수를 방지하는 데 도움이 됩니다.

class Person {
    var car: Car?
}

class Car {
    weak var owner: Person?
}

위 코드에서 Person 클래스를 참조하는 owner 프로퍼티는 weak 참조로 선언되어 있습니다. 이렇게 함으로써 사람이 차를 소유하지 않을 때, 참조 순환을 방지할 수 있습니다.

Unowned 참조

unowned 참조는 참조하고 있는 객체가 항상 유효하다고 가정합니다. 메모리에서 해제되었을 때는 crash가 발생합니다. 따라서, unowned 참조는 참조 대상이 항상 유효할 때만 사용해야 합니다.

class Apartment {
    unowned let owner: Person
    init(owner: Person) {
        self.owner = owner
    }
}

Apartment 클래스의 owner 프로퍼티는 unowned로 선언되어 있습니다. 이것은 해당 아파트가 항상 사람에 의해 소유되어야 한다는 가정을 나타냅니다.

따라서, weakunowned 참조를 올바르게 사용하여 순환 참조로 인한 메모리 누수를 방지할 수 있습니다.

참조: