🔥 소개

150자
2분

클로저(Closures)는 코드에서 전달하고 사용할 수 있는 독립적인 코드 덩어리예요. Swift의 클로저는 다른 프로그래밍 언어의 익명 함수, 람다, 블록과 비슷합니다.

클로저는 정의된 주변 환경에서 모든 상수와 변수를 캡처하고 저장할 수 있어요. 이렇게 캡처된 상수와 변수는 클로저가 실행되는 동안 계속 사용할 수 있죠.

예를 들어볼까요?

func makeCounter() -> () -> Int {
    var count = 0
    return {
        count += 1
        return count
    }
}
 
let counter = makeCounter()
print(counter()) // 1
print(counter()) // 2
print(counter()) // 3
swift

여기서 makeCounter 함수는 count라는 변수를 정의하고, 클로저를 반환해요. 반환된 클로저는 count 변수를 캡처해서 저장하고 있어요.

클로저가 호출될 때마다 캡처한 count 변수의 값을 증가시키고 반환하죠. 클로저 밖에서 정의된 count를 클로저 내부에 가둬두는 것처럼 보여서 "closing over"라고 표현해요.

Swift는 캡처를 위한 모든 메모리 관리를 자동으로 처리해 줍니다.

함수에서 배운 전역 함수와 중첩 함수는 사실 클로저의 특별한 경우랍니다. 클로저는 다음 세 가지 형태로 나타납니다:

  • 전역 함수는 이름이 있고 값을 캡처하지 않는 클로저예요.