[swift] 클로저와 함수의 차이점

클로저와 함수는 Swift 프로그래밍 언어에서 둘 다 코드 조각을 나타내는 데 사용되지만, 몇 가지 중요한 차이점이 있습니다. 이 글에서는 클로저와 함수 간의 주요 차이점을 살펴보겠습니다.

1. 문법적 차이점

클로저와 함수는 서로 비슷한 문법을 가지고 있지만, 다음과 같은 차이점이 있습니다.

2. 사용 방법의 차이점

// 클로저 변수에 할당 후 사용
let sumClosure = { (a: Int, b: Int) -> Int in
    return a + b
}
let result = sumClosure(3, 5) // 8

// 클로저를 매개 변수로 전달하는 함수 예제
func calculate(a: Int, b: Int, operation: (Int, Int) -> Int) -> Int {
    return operation(a, b)
}

let multiplyClosure = { (a: Int, b: Int) -> Int in
    return a * b
}

let result = calculate(a: 3, b: 5, operation: multiplyClosure) // 15

3. Capturing Value

클로저는 주변 범위에서 변수를 캡처할 수 있습니다. 캡처는 클로저가 변수를 소유하고, 해당 변수의 값에 대한 참조를 유지한다는 의미입니다. 이를 통해 클로저 안에서 외부 변수를 사용할 수 있습니다.

예를 들어, 다음과 같은 클로저에서 외부 변수 total을 캡처하여 사용하는 예제를 살펴보겠습니다.

func makeIncrementer(incrementAmount: Int) -> () -> Int {
    var total = 0
    
    let incrementer: () -> Int = {
        total += incrementAmount
        return total
    }
    
    return incrementer
}

let incrementByTwo = makeIncrementer(incrementAmount: 2)
print(incrementByTwo()) // 2
print(incrementByTwo()) // 4

이 예제에서 makeIncrementer 함수는 클로저를 반환하는 함수입니다. 클로저는 매번 호출될 때마다 total 값을 증가시킵니다.

4. 정리

클로저와 함수는 코드 조각을 나타내는 데 사용되지만, 문법적인 차이뿐만 아니라 사용 방법과 변수 캡처 기능 등 다양한 차이점이 있습니다. 적절한 상황에서 적합한 방법을 사용하여 Swift 프로그래밍을 할 수 있습니다.

참고: The Swift Programming Language - Closures