이스케이핑 vs 논 이스케이핑
함수와 클로저는 1급 객체이다. 변수에 저장하거나, 파라미터로 넘길 수 있다. 우리가 무심코 사용하고 있는 completion handler에서 escaping을 찾아볼 수 있는데, iOS의 많은 API 패턴에서 어떠한 동작이 끝났을 때에 대한 completion handler로 클로저를 넘긴다.
기본적으로 클로저는 @escaping (annotation) 를 붙이지 않고 함수의 파라미터로 넘겨지면, 함수의 scope 내에서만 동작하는 non-escaping 클로저로 사용된다. 함수의 동작이 끝나면 이 클로저는 더이상 사용되지 않는다.
Escaping 어노테이션으로 클로저를 넘기면, 해당 함수가 종료되더라도 클로저를 사용할 수 있다. 즉 함수 밖으로 클로저가 탈출할 수 있다. 그래서 특정 함수의 동작이 끝나고 나서 클로저의 작업을 할 수 잇는 completion handelr 를 사용할 수 있다.
https://hcn1519.github.io/articles/2017-09/swift_escaping_closure