안녕하세요 rOard입니다.😀
오늘은 스위프트에서 정말 많이 사용되는 클로저(Closure)에 대해 알아보려고 합니다.
이름없는 함수라고 불리는 클로저는 주로 함수의 매개변수나 반환값으로 사용이 됩니다.
파고들수록 어려운데, 간단한 개념을 정리 해보겠습니다.
우선 클로저에 대해 알아보기 전에 스위프트의 일급객체에 대해 알아보려고 합니다.
1. 일급 객체(First Class Object)란?
다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체를 가리킨다. [위키백과]
2. 일급 객체(First Class Object)의 조건
1. 변수나 상수에 할당할 수 있다.

2. 함수의 인자값으로 사용될 수 있다.

3. 함수의 리턴값으로 사용될 수 있다.

위의 세가지 조건을 만족시킬 수 있는 객체를 일급객체라 부릅니다.
위에서 볼 수 있듯이 스위프트에서 함수는 일급객체 입니다.
때문에 함수형 프로그래밍 이라고 표현할 수 있는것 같습니다.!
1. 클로저(Closure)란?
위의 일급객체에 대한 설명을 보면 알 수 있듯이 클로저는 일급객체로 취급됩니다.
때문에, 스위프트 언어가 지향하는 함수형 프로그래밍에서 빠질 수 없는 존재라고 생각됩니다.!
2. 클로저(Closure)의 형태

위와같이 함수에서는 보지못한 형태로 함수의 이름이 없이 사용되는 함수를 클로저라고 합니다.
3. 트레일링(Trailing) 클로저 / 후행 클로저

위와같이 함수의 인자값으로 클로저가 들어가 있는것을 보실 수 있습니다.
4. 클로저의 파라미터 생략 등 간소화 과정

1) 문맥상에서 파라미터와 리턴밸류 타입 추론(Type Inference)
2) 싱글 익스프레션인 경우(한줄), 리턴을 안 적어도 됨 (Implicit Return)
3) 아규먼트 이름을 축약 (Shorthand Arguments) ⇒ $0, $1
4) 트레일링 클로저 : 함수의 마지막 전달 인자(아규먼트)로 클로저가 전달되는 경우, 소괄호 생략가능
✅ 콜백 함수 : 함수를 실행하면서, 파라미터로 전달하는 함수.
5. 클로저의 캡쳐현상(Capuring Value)

클로저는 클로저의 사용 주기동안 힙(Heap)영역에 존재해야하고, 내부에서
외부에 존재하는 변수를 계속 사용해야 하기때문에 캡쳐 현상이 발생.
중첩함수 사용시 클로저와 동일한 캡쳐현상

함수를 변수에 할당하거나, 외부 변수를 사용하는 경우, 클로저를 사용하는 경우
힙(Heap)에 해당 메모리 주소를 저장 및 필요한 외부 변수를 캡쳐.
6. @escaping 키워드
원칙적으로 함수의 실행이 종료되면 파라미터로 쓰이는 클로저도 종료되지만
@escaping키워드는 클로저를 종료하지 않고, 함수에서 탈출시킴(함수가 종료되어도 클로저는 존재)
대표적으로 함수 내부에 사용한 클로저를 외부 변수에 저장하거나, GCD(비동기코드)를 사용할때 사용함.

이렇게 오늘은 일급객체 클로저에 대해 알아보았습니다.
다음번 포스팅은 고차함수에 대해 알아보도록 하겠습니다!
모두 즐코하세요!🔥
'iOS > Swift' 카테고리의 다른 글
| GCD vs Swift Concurrency 동작 원리 비교 (Swift Concurrency를 들어가면서...) (0) | 2025.07.05 |
|---|---|
| 클래스(Class)와 구조체(Struct) (0) | 2022.08.02 |
| 열거형(Enumeration)에 대해 알아보자! (0) | 2022.08.02 |
| 저장 타입 속성(Stored Type Properties)에 대해 알아보기!! (0) | 2022.07.21 |
| Swift Collection에 대해 알아보자!! (0) | 2022.07.12 |