[swift] unowned self 패턴
Swift 언어에서 unowned
키워드는 참조 사이클(reference cycle)을 방지하기 위해 사용됩니다. 특히, 클로저 내부에서 self를 약한 참조로 처리할 때 사용됩니다.
다른 종류의 참조인 weak
와 달리, unowned
참조는 항상 값을 가지고 있기 때문에 옵셔널이 아닙니다. 그러나 unowned
참조가 참조하는 객체가 먼저 해제되면 런타임 에러가 발생할 수 있습니다.
일반적으로 unowned
참조는 초기에 셋업되고 그 이후로 해제되지 않는 객체들간의 관계에서 사용됩니다. 또한, 해당 참조가 해제될 가능성이 거의 없거나 없는 경우에 사용할 수 있습니다.
예를 들어, 다음은 unowned
self 패턴이 사용된 클로저 예제입니다.
class MyClass {
var closure: (() -> Void)?
func setupClosure() {
self.closure = { [unowned self] in
// self를 약한 참조로 처리
print(self.property)
}
}
var property: Int = 5
}
let instance = MyClass()
instance.setupClosure()
instance.closure?() // "5" 출력
이 예제에서 closure
속성이 unowned self
로 클로저에 할당되었습니다. 이를 통해 self가 약한 참조로 처리되어 참조 사이클을 방지하면서도 클로저 내에서 해당 객체에 안전하게 접근할 수 있습니다.
unowned self
패턴은 참조 사이클을 방지하고 메모리 관리를 향상시키는데 유용한 패턴 중 하나입니다.