Closure란?


클로저는 중괄호({})로 감싸진 실행 가능한 코드 블럭입니다.

func helloGenerator(message: String) -> (String, String) -> String {
  return { (firstName: String, lastName: String) -> String in
    return lastName + firstName + message
  }
}

함수와는 다르게 함수 이름 정의가 따로 존재하지 않습니다. 하지만 파라미터를 받을 수 있고, 반환 값이 존재할 수 있다는 점에서 함수와 동일합니다. 즉, 함수는 이름이 있는 클로저입니다. 클로저는 in 키워드를 사용해서 파라미터, 반환 타입 영역실제 클로저의 코드를 분리하고 있습니다.

Swift 컴파일러의 타입 추론 덕분에, helloGenerator() 함수에서 반환하는 타입을 가지고 클로저에서 어떤 파라미터를 받고 어떤 타입을 반환하는지를 알 수 있어 아래와 같이 코드는 간결화 할 수 있습니다.

func helloGenerator(message: String) -> (String, String) -> String {
  return { firstName, lastName in
    return lastName + firstName + message
  }
}

놀라운 사실은 여기서 생략할 수 있는게 더 있다는 사실입니다. 마찬가지로 타입 추론 덕분에 첫 번째 파라미터가 문자열이고, 두 번째 파라미터도 문자열이라는 것을 알 수 있습니다. 첫 번째 파라미터는 $0, 두 번째 파라미터는 $1로 바꿔서 쓸 수 있습니다.

func helloGenerator(message: String) -> (String, String) -> String {
  return {
    return $1 + $0 + message
  }
}

클로저 내부의 코드가 한 줄이라면, return까지도 생략해버릴 수 있습니다.

func helloGenerator(message: String) -> (String, String) -> String {
  return { $1 + $0 + message }
}

고차함수란?


고차함수란 매개변수로 함수를 갖는 함수입니다.

고차함수를 사용하게 되면 함수의 내부 코드를 건드리지 않고도 외부에서 실행 흐름을 추가할 수 있어

함수의 재활용성, 재사용성 의 이점을 얻을 수 있습니다.

고차함수의 종류