[swift] weak 참조와 unowned 참조
스위프트에서는 weak와 unowned 참조를 사용하여 객체 간의 강한 참조 순환을 피할 수 있습니다. 이러한 순환 참조는 메모리 누수를 초래할 수 있기 때문에 올바른 참조 타입을 선택하는 것이 중요합니다.
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로 선언되어 있습니다. 이것은 해당 아파트가 항상 사람에 의해 소유되어야 한다는 가정을 나타냅니다.
따라서, weak와 unowned 참조를 올바르게 사용하여 순환 참조로 인한 메모리 누수를 방지할 수 있습니다.
참조: