[swift] 클로저를 사용하여 함수의 일부 로직을 외부에서 전달하는 방법은 무엇인가요?

예를 들어, map이나 filter와 같은 고차 함수를 호출할 때, 클로저를 넘겨서 각 요소에 대해 원하는 동작을 적용할 수 있습니다. 클로저는 { (매개변수) -> 반환타입 in 식 }과 같은 구문으로 작성되며, 함수에서 실행되는 일부 코드를 감싸고 있습니다.

아래는 클로저를 사용하여 함수의 일부 로직을 외부에서 전달하는 간단한 예시입니다.

// 숫자 배열을 받아서 각 요소에 제곱을 적용하는 함수
func squareNumbers(_ numbers: [Int], using closure: (Int) -> Int) -> [Int] {
    var squaredNumbers = [Int]()
    for number in numbers {
        squaredNumbers.append(closure(number))
    }
    return squaredNumbers
}

// 클로저를 사용하여 제곱 연산을 외부에서 전달
let originalNumbers = [1, 2, 3, 4, 5]
let squaredNumbers = squareNumbers(originalNumbers, using: { number in
    return number * number
})
print(squaredNumbers) // 출력: [1, 4, 9, 16, 25]

위 예시에서, squareNumbers 함수는 using 매개변수를 통해 클로저를 전달받습니다. 클로저는 number를 제곱하여 반환하도록 정의되었고, 이 동작이 함수 내에서 실행됩니다.

이렇게 함으로써, 클로저를 활용하여 함수의 일부 로직을 외부에서 전달하여 보다 유연하고 재사용 가능한 코드를 작성할 수 있습니다.