[swift] 클로저와 함수의 차이점
클로저와 함수는 Swift 프로그래밍 언어에서 둘 다 코드 조각을 나타내는 데 사용되지만, 몇 가지 중요한 차이점이 있습니다. 이 글에서는 클로저와 함수 간의 주요 차이점을 살펴보겠습니다.
1. 문법적 차이점
클로저와 함수는 서로 비슷한 문법을 가지고 있지만, 다음과 같은 차이점이 있습니다.
- 함수는
func
키워드로 선언되고, 이름을 가집니다. 예를 들어,func sum(a: Int, b: Int) -> Int
과 같은 형태입니다. - 클로저는 중괄호
{}
안에 매개 변수와 리턴 타입을 작성하며, 이름은 필요하지 않습니다. 예를 들어,{ (a: Int, b: Int) -> Int in return a + b }
과 같은 형태입니다.
2. 사용 방법의 차이점
- 함수는 호출하기 위해 이름을 사용합니다. 예를 들어,
sum(a: 3, b: 5)
와 같이 함수 이름 뒤에 매개 변수를 전달합니다. - 클로저는 이름이 없기 때문에, 함수와는 다른 방식으로 사용됩니다. 주로 다른 함수 내에서 사용되거나, 변수에 할당되어 사용됩니다.
// 클로저 변수에 할당 후 사용
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