[swift] 클로저 캡처 목록(Capture List)

클로저는 자신이 정의된 환경에서 변수와 상수를 캡처하여 사용할 수 있습니다. 이러한 클로저 캡처 기능은 유용하지만, 때로는 캡처하는 변수와 상수가 메모리 관리의 문제가 될 수 있습니다. 이런 상황에서 사용하는 것이 클로저 캡처 목록(Capture List)입니다.

클로저 캡처 목록은 클로저 내부에서 캡처하는 변수와 상수의 생명 주기를 관리하는데 사용됩니다. 캡처 목록은 클로저의 인자로 사용되며, 클로저 정의 바로 앞에 콤마로 구분하여 작성됩니다. 캡처 목록에는 다음과 같은 두 가지 항목이 포함될 수 있습니다:

  1. weak 또는 unowned: 클로저가 캡처하는 변수나 상수가 강한 참조로 인해 순환 참조 문제를 일으킬 수 있는 경우 사용됩니다. weak는 약한 참조로, unowned는 비소유 참조로 사용됩니다.
  2. 변수나 상수: 클로저가 캡처할 변수나 상수를 지정합니다.
{ [weak self] (parameters) -> ReturnType in
    // 클로저 내부 로직
}

위의 예제 코드에서 [weak self]는 self라는 변수를 약한 참조로 캡처한다는 의미입니다. 이렇게 캡처된 변수는 클로저 내부에서도 사용할 수 있으며, 클로저 외부에서 참조할 때 메모리 관리 문제를 예방할 수 있습니다.

만약 self가 클로저 내부에서 변경되지 않고(immutable) 영향을 받지 않는다면, unowned를 사용하여 비소유 참조로 캡처할 수도 있습니다.

클로저 캡처 목록은 메모리 관리와 순환 참조 문제를 해결하기 위해 사용되는 강력한 기능입니다. 코드를 작성할 때 이를 적절하게 활용하여 안정적인 애플리케이션을 개발할 수 있습니다.

더 자세한 내용은 Swift 공식 문서를 참고하세요.