[swift] 클로저

클로저는 스위프트에서 사용되는 강력한 개념 중 하나로, 일급 객체로서 함수와 비슷한 역할을 수행합니다. 클로저는 변수나 상수로 저장하거나 전달할 수 있으며, 함수와 마찬가지로 매개변수를 통해 전달되거나 반환될 수도 있습니다.

클로저의 기본 형태

클로저의 기본 형태는 다음과 같습니다.

{ (매개변수) -> 반환타입 in
    // 클로저의 동작 코드 작성
}

클로저 사용 예제

  1. 정수 배열을 오름차순으로 정렬하기
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]
  1. 클로저를 변수나 상수에 저장하기
let add: (Int, Int) -> Int = { (a, b) in
    return a + b
}
let result = add(3, 5)
// result: 8
  1. 클로저를 함수의 매개변수로 전달하기
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
  1. 클로저를 반환값으로 사용하기
func getCalculator() -> (Int, Int) -> Int {
    return { (a, b) in
        return a * b
    }
}

let multiply = getCalculator()
let result = multiply(4, 2)
// result: 8

클로저의 간략화

클로저는 문법의 일부 기능을 이용하여 간략화할 수 있습니다. 다음은 클로저 간략화의 예시입니다.

  1. 클로저의 매개변수 타입을 생략
let sortedNumbers = numbers.sorted(by: { (num1, num2) in
    return num1 < num2
})
  1. 클로저의 반환타입을 생략
let sortedNumbers = numbers.sorted(by: { (num1, num2) in
    num1 < num2
})
  1. 단축 인자 이름 사용
let sortedNumbers = numbers.sorted(by: {
    $0 < $1
})
  1. 후행 클로저 사용
let sortedNumbers = numbers.sorted() { $0 < $1 }
  1. 전체 생략
let sortedNumbers = numbers.sorted { $0 < $1 }

참고 자료