728x90
|
클로저 (Closure)
- 다른 프로그래밍 언어의 람다(Lamda)와 유사한 개념
- 일정 기능을 하는 코드를 하나의 블록으로 모아 놓은 것
- 내부 함수와 내부 함수에 영향을 미치는 주변 환경을 모두 포함한 객체
- 함수는 클로저의 한 형태
- 변수, 상수가 선언된 위치에서 참조(Reference)를 획득(Capture)하고 저장할 수 있다.
- 변수나 상수의 Closing이라고 함
- 참조 타입 (Reference Type)
값 획득 (Capture)
- 클로저는 자신이 정의된 위치의 주변 문맥을 통해 상수, 변수를 획득 (Capture)할 수 있다.
- 이 때 Value Type, Reference Type 둘 다 Reference Capture를 하기 때문에 Value Type을 캡처하더라도 원본 값이 변하면 클로저 내부의 값도 변한다.
- 주변에 정의한 상수, 변수가 더 이상 존재하지 않더라도 해당 상수, 변수의 값을 자신의 내부에서 참조하거나 수정할 수 있다.
- 중첩함수도 하나의 클로저
- 자신을 포함하는 함수의 지역변수나 지역상수를 획득할 수 있다.
- 비동기 콜백(Callback)에 자주 이용됨
import Foundation
var closure: () -> () = {
}
for i in 0 ..< 5 {
if i == 3 {
closure = {
print(i)
}
}
}
closure()
//결과: 3
728x90
'Swift' 카테고리의 다른 글
[Swift] self vs Self (0) | 2021.12.08 |
---|---|
[Swift] Dynamic Dispatch vs Static Dispatch (0) | 2021.12.05 |
[Swift] Any, AnyObject (0) | 2021.06.21 |
[Swift] defer (0) | 2021.06.21 |
[Swift] 스위프트 네이티브 객체 (0) | 2021.06.15 |
댓글