[Swift] 클로저 (Closure)

클로저란

Swift 가이드북에 따르면

이름이 없는 함수이다.

정의된 컨텍스트에서 상수와 변수에 대한 참조를 “캡처“하고 저장할 수 있다.

클로저는 다음 세 가지 형태를 취한다.

  1. 전역함수 → 이름이 있고 값을 캡처하지 않는 클로저
  2. 중첩함수 → 이름이 있고 해당 함수를 둘러싼 함수에서 값을 캡처할 수 있는 클로저
  3. 클로저 표현식 → 이름이 없고 값을 캡처할 수 있는 클로져

캡처는 간단히 말해서 클로저 내에서 사용되는 변수와 상수의 값에 접근할 수 있게 하는 것인거 같다. 자세한 학습은 추후 클로저의 말미에 캡처에 대해서만 정리해보도록 하자 !

전역함수

func globalFunc(a: Int, b: Int) -> Int {
    a + b
}

이러한 전역 함수는 globalFunc라는 이름을 가진 클로저

중첩함수

func globalFunc(a: Int, b: Int) -> Int {
    func printParameter() {
        print("a : \(a) b: \(b)")
    }
    printParameter()
    return a + b
}

printParameter라는 이름을 가진 클로저이고 globalFunc의 파라미터 a, b를 캡처하여 중첩함수 안에서 접근이 가능하다. 이런게 캡처라는 건가?

클로저 표현식

그렇다면 클로저 표현식은 뭔데? 그리고 이름이 없는 함수라면 어떻게 호출을 하지?

먼저 클로저 표현식의 정의에 대해 알아보자.

클로저 표현식은 간결하고 깔끔한 구문을 권장하는 최적화와 함께 명확한 스타일을 가지고 있습니다.

그리고 위에 나온 최적화는 다음이 포함되어 있다.

  1. 매개 변수, 반환 값의 타입추론
  2. 단일표현식 클로저에서의 암시적 반환
  3. 약식 인수 이름
  4. 후행클로저(Tailing Closure)

뭔가 복잡해 보인다. 캡처링도 자세히는 모르겠고, 또 어떻게 사용하는지 저 4가지의 최적화는 무엇인지

앞으로 차근차근 학습해 보자!

태그:

카테고리:

업데이트:

댓글남기기