본문 바로가기
Swift

[Swift] 클로저 (Closure)

by Sky Titan 2021. 7. 12.
728x90
스위프트 프로그래밍
국내도서
저자 : 야곰
출판 : 한빛미디어 2019.10.01
상세보기

 

 

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()
//결과: 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

댓글