[swift] 클로저가 함수와 다른 점

클로저는 Swift에서 중요한 개념 중 하나이며, 함수와 매우 유사해 보일 수 있지만 몇 가지 중요한 차이점이 있습니다. 이 포스트에서는 클로저와 함수의 주요 차이점 몇 가지를 살펴보겠습니다.

1. 문법적 차이

클로저는 중괄호로 둘러싸여 있고, 입력 매개변수와 반환 타입을 생략할 수 있습니다. 함수는 func 키워드로 시작하며 입력 매개변수와 반환 타입을 명시해야 합니다.

예시:

// 클로저
let closure = { (a: Int, b: Int) in
    return a + b
}

// 함수
func sum(a: Int, b: Int) -> Int {
    return a + b
}

2. 이름과 레이블

클로저는 이름이 없는 익명 함수로, 변수나 상수에 저장되거나 다른 함수의 인자로 전달될 수 있습니다. 함수는 이름과 함께 정의되며, 해당 이름을 사용하여 호출됩니다.

예시:

// 클로저
let closure = { (a: Int, b: Int) in
    return a + b
}

// 함수
func sum(a: Int, b: Int) -> Int {
    return a + b
}

let result1 = closure(3, 5) // 클로저 호출
let result2 = sum(a: 3, b: 5) // 함수 호출

3. Capturing Values

클로저는 주변 범위에서 상수나 변수를 캡처하여 사용할 수 있습니다. 이는 주변 범위가 변경되어도 해당 값이 유지된다는 의미입니다. 함수는 주변 범위의 값을 캡처하지 않습니다.

예시:

func makeIncrementer(_ amount: Int) -> () -> Int {
    var total = 0
    return {
        total += amount
        return total
    }
}

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

클로저를 사용할 때와 함수를 사용할 때 각각의 장단점을 고려하여 상황에 맞게 선택해야 합니다. 이러한 차이점을 이해하면 Swift 언어의 기능을 보다 효과적으로 활용할 수 있습니다.

더 자세한 정보는 Swift 공식 문서를 참고하세요.