[swift] weak 참조와 클로저 캡처 리스트

클로저 내부에서 객체를 참조할 때 메모리 누수를 방지하기 위해 weak 참조를 사용할 수 있습니다. 이 포스트에서는 Swift에서 weak 참조와 클로저 캡처 리스트를 사용하는 방법을 살펴보겠습니다.

weak 참조란?

weak 참조는 참조하는 객체가 메모리에서 해제될 때 자동으로 nil로 설정되는 참조 방식을 말합니다. 이를 통해 Strong Reference Cycle을 방지하고 메모리 누수를 방지할 수 있습니다.

class Person {
    let name: String
    lazy var printName: () -> Void = { [weak self] in
        guard let self = self else { return }
        print("My name is \(self.name)")
    }

    init(name: String) {
        self.name = name
    }

    deinit {
        print("Person instance \(self.name) is deallocated")
    }
}

위의 코드에서 클로저 내부에서 selfweak로 캡처하여 메모리 누수를 방지하고 있습니다.

클로저 캡처 리스트

클로저에서 외부 변수나 상수를 참조할 때, 해당 값을 캡처하여 클로저 내부에서 사용할 수 있습니다.

var outsideValue = 10
let closure = { [outsideValue] in
    print(outsideValue)
}

클로저에서 외부 변수 outsideValue를 캡처하여 사용하기 위해 캡처 리스트를 사용하고 있습니다.

weak 참조와 클로저 캡처 리스트는 Swift에서 메모리 관리와 클로저 관련 작업을 수행할 때 유용하게 활용될 수 있는 기능입니다.

참고 자료: Apple Developer Documentation