🔥 소개

150자
2분

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

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

예를 들어볼까요?

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
func makeCounter() -> () -> Int {
    var count = 0
    return {
        count += 1
        return count
    }
}
 
let counter = makeCounter()
print(counter()) // 1
print(counter()) // 2
print(counter()) // 3

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

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

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

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

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

YouTube 영상

채널 보기
NestJS 가드, 바이딩과 스코프 | NestJS 가이드
인터셉터와 RxJS로 캐시 시스템 구축하기 | NestJS 가이드
매번 ValidationPipe 복붙하세요? NestJS 전역 파이프로 한 번에 해결하기 | NestJS 가이드
미들웨어 vs 가드, 왜 NestJS에서는 가드가 더 똑똑할까? | NestJS 가이드
API 응답 지연과 복잡한 에러, NestJS 인터셉터로 관리하는 방법 | NestJS 가이드
NestJS 역할 기반 접근 권한 부여 - Guard, Reflector | NestJS 가이드
Pro펑터, 입력과 출력을 동시에 다루는 펑터 | 프로그래머를 위한 카테고리 이론
NestJS 커스텀 데코레이터, createParamDecorator 사용 | NestJS 가이드