[swift] 클로저 표현식(Closure Expressions)

스위프트에서 클로저는 함수나 메서드와 비슷한 역할을 하는 코드 블록이다. 클로저는 함수나 메서드처럼 이름이 따로 붙지 않기 때문에 익명 함수라고도 불린다. 클로저를 변수나 상수에 할당하거나 파라미터로 전달할 수 있어서 함수형 프로그래밍에서 주요한 역할을 한다.

스위프트에서 클로저 표현식은 간결하고 유연한 코드 작성을 가능하게 해준다. 이번 포스트에서는 클로저 표현식에 대해 자세히 알아보고, 실제 사용 예제도 살펴볼 것이다.

클로저 표현식 문법(Syntax)

클로저 표현식의 기본 문법은 다음과 같다.

{ (parameters) -> return type in
    statements
}

여기서

예를 들어, 간단한 정수를 두 배로 만드는 클로저 표현식은 다음과 같다.

let doubleClosure: (Int) -> Int = { number in
    return number * 2
}

위 클로저는 Int 타입의 파라미터를 받아들이고, Int 타입을 반환한다.

클로저 표현식 사용 예제

클로저를 사용하여 배열의 원소를 정렬하는 예제를 살펴볼 것이다. 다음은 정렬 함수를 사용한 예제이다.

let names = ["Steve", "Adam", "Zack", "Eric"]

func backward(_ s1: String, _ s2: String) -> Bool {
    return s1 > s2
}

var reversedNames = names.sorted(by: backward)
// 결과: ["Zack", "Steve", "Eric", "Adam"]

위 예제에서는 backward 함수를 사용하여 문자열을 내림차순으로 정렬했다. 그러나, 클로저 표현식을 사용하면 이를 더욱 간결하게 할 수 있다.

var reversedNames = names.sorted(by: { (s1: String, s2: String) -> Bool in
    return s1 > s2
})
// 결과: ["Zack", "Steve", "Eric", "Adam"]

위 코드에서 sorted 메서드에 클로저 표현식을 파라미터로 전달하여 배열을 정렬했다. 클로저는 두 개의 String 파라미터를 받아들이고 Bool 값을 반환하는데, s1이 s2보다 큰지를 비교하여 정렬한다.

결론

클로저 표현식은 스위프트의 강력한 기능 중 하나로, 간결하고 유연한 코드 작성을 가능하게 해준다. 함수형 프로그래밍의 중요한 개념이며, 많은 경우 가독성이 뛰어나며 간결한 코드를 작성할 수 있도록 도와준다.

이를 통해 클로저 표현식을 효과적으로 사용하여 코드를 간결하게 작성하고, 함수형 프로그래밍의 장점을 살릴 수 있다.

참고: The Swift Programming Language - Closure Expressions