[swift] weak 참조와 nil 처리

Swift에서 메모리 누수를 방지하기 위해 weak 참조를 사용하는 것은 중요합니다. 특히 순환 참조가 발생할 수 있는 경우에는 더욱 중요합니다.

weak 참조란?

weak 참조는 참조하는 객체를 강하게 유지하지 않고 참조할 수 있는 객체가 더 이상 존재하지 않으면 자동으로 nil로 설정됩니다.

weak var weakRef: MyClass?

위의 코드에서 weak 키워드를 사용하여 weakRef를 선언했습니다. 이렇게 선언된 weak 참조는 참조하는 객체의 수명과 관계없이 자동으로 nil이 될 수 있습니다.

weak 참조의 활용

weak 참조는 순환 참조 문제를 해결하기 위해 주로 활용됩니다. 부모-자식 객체 간에 서로를 강하게 참조할 때 발생하는 순환 참조 문제를 해결하기 위해 weak 참조를 활용할 수 있습니다.

class Parent {
    weak var child: Child?
}

class Child {
    weak var parent: Parent?
}

위의 코드에서 ParentChild 클래스가 서로를 참조하는데, weak 키워드를 통해 순환 참조 문제를 해결할 수 있습니다.

nil 처리

weak 참조는 참조하는 객체가 더는 존재하지 않을 수 있기 때문에 nil 처리를 꼭 해주어야 합니다. Optional binding 또는 옵셔널 체이닝을 통해 nil 처리를 해주어야 합니다.

if let value = weakRef {
    // value를 사용
} else {
    // weak 참조의 값이 nil일 때 처리
}

weakRef가 nil이 아닌 경우에만 코드를 수행하도록 Optional binding을 사용하거나 옵셔널 체이닝을 통해 nil 처리를 해주어야 합니다.

weak 참조와 nil 처리를 올바르게 다루어 메모리 누수를 방지할 수 있습니다.

참고 자료: Apple Developer Documentation