Swift
[Swift] 클로저 (Closure)
Sky Titan
2021. 7. 12. 20:22
728x90
![]() |
|
Swift) 클로저(Closure) 정복하기(3/3) - 클로저와 ARC
안녕하세요 :) 소들입니다! 이번 포스팅은 클로저 정복하기 마지막 편!!! 메모리나 ARC에 대한 사전 지식이 없으면 조금 이해하기 어려울 수 있으니, 메모리 관련 포스팅을 먼저 보고 오심을 추천
babbab2.tistory.com
클로저 (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()
//결과: 3728x90
