💡 클로저 (Closure)

  • 클로저는 사용자의 코드 안에서 전달되어 사용할 수 있는 로직을 가진 중괄호{}로 구분된 코드의 블럭을 의미
  • 전역함수(global function)와 중첩함수(nested function)기 모두 클로저에 포함
  • 보통 클로저는 Unnamed Closure를 의미하는 것이지만, Named Closure(함수) 또한 Closure에 포함

  1. Named Closure (함수)

func doSomething() {
    print("Named Closure")
}

다음 코드와 같이 우리가 일반적으로 func()을 사용해 정의하는 이름이 있는 함수를 의미
단지, 이를 클로저로 부르는 것이 아니라, 그냥 함수로 명칭



  1. Unnamed Closure (익명함수)

let closure = { print("Unnamed Closure") }

보통 Closure의 의미는 다음과 같이 이름을 붙이지 않고 사용하는 함수(익명함수)를 말함


  • 따라서 클로저는 익명이긴 하지만 함수이기에 1급 객체 함수의 특성을 모두 가짐

1급 객체 함수의 특성

  1. 변수나 상수에 저장 및 할당 가능
  2. 파라미터(객체의 인자)로 전달 가능
  3. 함수(객체)에서 return 가능


Swift의 클로저와 같은 것들

  • C, C++, Objective-C : block
  • Java : Lambda funciton
  • C# : Delegates


💡 클로저 표현식

{ (parameters) -> return type in
    statements
}

in을 기준으로 앞부분 ((parameters) -> return type)은 Closure Head, 뒷부분 statements는 Closure Body