Swift의 클로저

Zeto·2022년 5월 9일
0

Swift_Study

목록 보기
18/18

클로저란 무엇인가? 클로저는 이름을 명시하지 않은 익명 함수를 의미하며 일급 객체로서 인자로 보내거나 반환 값을 전달 및 저장하는 역할을 할 수도 있다.

참조타입의 클로저

이러한 클로저는 희한하게도 참조 타입으로 분류되는데 이에 대한 이유로는 "클로저가 값을 캡처하기 때문"이다. 클로저에 매개변수가 있는 경우, 해당 매개변수에 전달된 값을 사용하기 위해서 이를 '캡처'하여 저장한다.
즉, 참조타입이 들어올 경우 클로저도 참조타입으로 값을 캡처해야하는 경우도 발생하기 때문에 참조타입으로 분류하게 된다.

탈출(escaping) 클로저

클로저는 하나의 값을 갖는 단순한 녀석이 아니라 어떠한 작업을 실행할 수 있는 코드블럭 단위인데, 이러한 실행 요소가 무조건 클로저 내에 정의된 단에서 실행되지 않고 return 이후에 실행시키고 싶은 상황이 있을 수 있다. 이럴 때 우리는 @escaping 키워드를 사용하여 해당 클로저를 탈출 클로저로 활용할 수 있다.

클로저의 메모리 누수

결국 클로저도 참조 타입이다보니 강한 참조에 의한 Retain Cycle(순환 참조)에 빠져 메모리 누수가 일어날 수 있다.
특히 self를 캡쳐링하는 상황에서는 해당 문제가 발생할 가능성이 높으므로 순환참조가 발생하지 않도록 weak self를 사용한다.

profile
중2병도 iOS가 하고싶어

0개의 댓글