Swift에서 이름 없는 함수처럼 동작하는 일급 객체 코드 블럭
변수에 저장하거나, 함수에 전달할 수 있음.
{ (매개변수) -> 반환형 in
실행 코드
}
Swift에서 함수의 마지막 매개변수가 클로저일 때,
함수 괄호 () 바깥에 클로저를 작성할 수 있는 문법입니다.
func greet(action: () -> Void) {
action()
}
// 일반 클로저 호출
greet(action: {
print("Hello")
})
// ⬇ 트레일링 클로저 문법
greet {
print("Hello")
}
| 항목 | 함수 | 클로저 |
|---|---|---|
| 이름 | 있음 | 없음(익명) or 변수에 저장 |
| 위치 | 주로 전역 or 타입 내부 | 변수, 인자, 지역에서 자유롭게 |
| 용도 | 재사용 가능한 로직 정의 | 일시적 작업 전달 or 캡처 용도 |
| 캡처 | 불가 | 가능 (외부 변수 기억) |
| 문법 | 명확 | 간결, 유연 |
클로저가 자신이 정의된 위치의 변수(외부 변수)를
기억하고 사용할 수 있는 기능이에요.
즉, 함수랑 다르게 외부 값들을 "잡아두고" 나중에 써요!
func makeCounter() -> () -> Int {
var count = 0
let counter = {
count += 1
return count
}
return counter
}
let myCounter = makeCounter()
print(myCounter()) // 1
print(myCounter()) // 2
print(myCounter()) // 3