[swift] unowned 참조의 적절한 사용 시나리오

unowned 참조는 strong 참조와 달리 참조 대상이 항상 존재하는 경우에 사용됩니다. 일반적으로, 해당 객체가 dealloc되어도 프로그램이 여전히 정상적으로 동작할 때 사용됩니다.

적절한 사용 시나리오

  1. 의존성이 있는 참조: unowned는 객체 간의 강한 순환 참조를 방지하기 위해 사용됩니다. 예를 들어, 부모 뷰가 자식 뷰를 참조하고, 다시 자식 뷰가 부모를 참조할 때 unowned를 사용하여 강한 참조 순환을 방지할 수 있습니다.
class Parent {
    unowned var child: Child?
    // ...
}

class Child {
    unowned var parent: Parent
    // ...
}
  1. 클로저 캡처: 클로저가 self를 캡처하고 self가 클로저를 강하게 참조하는 순환 참조를 방지하기 위해 unowned를 사용할 수 있습니다.
class NetworkManager {
    func fetchData(completion: @escaping (Result) -> Void) {
        // ...
    }
}

class DataManager {
    let networkManager = NetworkManager()
    
    func fetchDataAndUpdateUI() {
        networkManager.fetchData { [unowned self] result in
            // ...
        }
    }
}

주의 사항

unowned 참조는 순환 참조를 방지하고 메모리 누수를 방지하는 데 유용하지만, 신중하게 사용해야 합니다. 올바른 상황에서 사용된다면 안전하고 효율적인 프로그래밍을 도울 수 있습니다.


참조:

  1. Apple Developer Documentation
  2. Swift.org