[swift] 클로저 탈출

클로저는 자바의 람다와 유사한 익명 함수로, 함수나 메서드 내부에서 사용할 수 있는 중첩된 코드 블럭입니다. 이를 통해 비동기적인 작업을 처리하거나, 함수나 메서드의 실행 중 일부 코드를 인자로 받아 실행하도록 할 수 있습니다.

하지만, 클로저 내에서 실행되는 코드가 외부의 스코프에 영향을 미치는 경우가 있습니다. 기본적으로 클로저는 해당 클로저가 선언된 스코프에 대한 참조를 캡처하지만, 이는 또한 메모리 누수를 유발할 수 있습니다.

이를 방지하기 위해 스위프트에서는 클로저의 탈출(Escaping) 여부를 명시적으로 선언해주어야 합니다.

func someFunction(completionHandler: @escaping () -> Void) {
    // ...
}

위 코드에서 @escaping 키워드는 클로저가 함수 실행이 완료된 후에도 여전히 실행될 수 있음을 나타냅니다. 이렇게 명시적으로 선언하지 않으면 클로저의 실행이 보장되지 않는다는 경고 메시지가 나타납니다.

이러한 방식으로 클로저를 사용함으로써 메모리 누수 발생을 방지하고, 비동기적인 작업을 보다 안정적으로 처리할 수 있게 됩니다.

더 자세한 내용은 스위프트 공식 문서를 참고하세요.