[swift] 클로저
클로저는 스위프트에서 사용되는 강력한 개념 중 하나로, 일급 객체로서 함수와 비슷한 역할을 수행합니다. 클로저는 변수나 상수로 저장하거나 전달할 수 있으며, 함수와 마찬가지로 매개변수를 통해 전달되거나 반환될 수도 있습니다.
클로저의 기본 형태
클로저의 기본 형태는 다음과 같습니다.
{ (매개변수) -> 반환타입 in
// 클로저의 동작 코드 작성
}
클로저 사용 예제
- 정수 배열을 오름차순으로 정렬하기
let numbers = [4, 2, 9, 7, 5]
let sortedNumbers = numbers.sorted(by: { (num1, num2) -> Bool in
return num1 < num2
})
// sortedNumbers: [2, 4, 5, 7, 9]
- 클로저를 변수나 상수에 저장하기
let add: (Int, Int) -> Int = { (a, b) in
return a + b
}
let result = add(3, 5)
// result: 8
- 클로저를 함수의 매개변수로 전달하기
func calculate(a: Int, b: Int, operation: (Int, Int) -> Int) {
let result = operation(a, b)
print("Result: \(result)")
}
calculate(a: 5, b: 3, operation: { (num1, num2) in
return num1 * num2
})
// Output: Result: 15
- 클로저를 반환값으로 사용하기
func getCalculator() -> (Int, Int) -> Int {
return { (a, b) in
return a * b
}
}
let multiply = getCalculator()
let result = multiply(4, 2)
// result: 8
클로저의 간략화
클로저는 문법의 일부 기능을 이용하여 간략화할 수 있습니다. 다음은 클로저 간략화의 예시입니다.
- 클로저의 매개변수 타입을 생략
let sortedNumbers = numbers.sorted(by: { (num1, num2) in
return num1 < num2
})
- 클로저의 반환타입을 생략
let sortedNumbers = numbers.sorted(by: { (num1, num2) in
num1 < num2
})
- 단축 인자 이름 사용
let sortedNumbers = numbers.sorted(by: {
$0 < $1
})
- 후행 클로저 사용
let sortedNumbers = numbers.sorted() { $0 < $1 }
- 전체 생략
let sortedNumbers = numbers.sorted { $0 < $1 }