[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 패턴은 참조 사이클을 방지하고 메모리 관리를 향상시키는데 유용한 패턴 중 하나입니다.

참조