목차


함수형 프로그래밍은 대규모 병렬처리에 유리하고, 스레드에 비교적 안전하며 콜백 등의 연관처리에 있어서 코드가 분산되는 것을 최소화할 수 있다는 장점이 있다.

Chapter 13. 클로저


클로저(Closure)는 일정 기능을 하는 코드를 하나의 블록으로 모아놓은 것을 말한다. 변수나 상수가 선언된 위치에서 참조(Reference)를 획득(Capture)하고 저장할 수 있다. 함수는 클로저의 한 형태이다.

기본 클로저

//스위프트 라이브러리의 sorted(by:) 메서드 정의
//클로저의 반환값이 true이면 첫 번째 전달인자가 두 번째 전달인자보다 앞에 온다.
public func sorted(by areInIncreasingOrder: (Element, Element) -> Bool) -> [Element]

let names: [String] = ["wizplan", "eric", "yagom", "jenny"]

//함수 전달
func backwards(first: String, second: String) -> Bool {
		return first > second
}
let reversed: [String] = names.sorted(by: backwards)

//클로저 형식
{ (매개변수들) -> 반환 타입 in
		실행 코드
}

//클로저 전달
let reversed: [String] = names.sorted(by: { (first: String, second: String) -> Bool in 
		return first > second })

클로저도 입출력 매개변수를 사용할 수 있고, 매개변수 이름을 지정한다면 가변 매개변수 또한 사용할 수 있다. 다만 매개변수 기본값을 사용할 수는 없다.

후행 클로저

함수나 메서드의 마지막 전달인자로 위치하는 클로저는 함수나 메서드의 소괄호를 닫은 후 작성해도 된다.

전달인자로 클로저 여러 개를 전달할 때는 맨 마지막 클로저만 후행 클로저로 사용할 수 있다. 단 하나의 클로저만 전달인자로 전달하는 경우에는 소괄호를 생략할 수 있다.