[Swift] 클로저(Closure)

choe_ju·2023년 10월 6일

📖 클로저(Closure)란?

  • 클로저는 Swift에서 중요한 개념 중 하나로, 함수와 비슷한 역할을 하며, 코드 블록을 감싸고 나중에 실행할 수 있는 독립적인 기능 단위를 나타냅니다. 클로저는 변수나 상수에 할당하거나 함수의 인자로 전달할 수 있으며, 주로 비동기 작업, 정렬, 필터링 등 다양한 작업에 활용됩니다.

📎 클로저 선언 방식

1. 함수 형태의 클로저

  • 첫 번째 예제는 함수 형태의 클로저를 보여줍니다. addition이라는 클로저는 두 개의 정수를 인자로 받고, 그 합을 반환하는 클로저입니다.
let addition: (Int, Int) -> Int = { (a, b) in
    return a + b
}
let result = addition(3, 5) // 결과: 8

2. 간결한 형식의 클로저

  • 두 번째 예제에서는 간결한 형태의 클로저를 소개합니다. 이 클로저는 $0$1을 사용하여 두 숫자를 곱한 값을 반환합니다.
let multiply: (Int, Int) -> Int = { $0 * $1 }
let result = multiply(3, 5) // 결과: 15

3. 클로저를 변수에 할당

  • 세 번째 예제에서는 클로저를 변수에 할당하는 방법을 보여줍니다. division 변수에 클로저를 할당하고, 두 개의 실수를 나누어주는 클로저를 정의합니다.
let division = { (a: Double, b: Double) -> Double in
    return a / b
}
let result = division(10.0, 2.0) // 결과: 5.0

4. 클로저를 함수 인자로 사용

  • 네 번째 예제는 함수의 인자로 클로저를 전달하는 방법을 보여줍니다. performOperation 함수는 두 정수와 클로저를 인자로 받아서 클로저를 실행하여 결과를 반환합니다.
func performOperation(a: Int, b: Int, operation: (Int, Int) -> Int) -> Int {
    return operation(a, b)
}

let result = performOperation(a: 10, b: 5, operation: { (a, b) in a - b })
// 결과: 5

📎 클로저 활용 예제

1. 정렬

  • 첫 번째 활용 예제는 배열의 정렬입니다. sorted 메서드는 클로저를 사용하여 배열의 요소를 정렬합니다. 이 경우 $0$1은 배열 요소를 나타내며, 클로저 내부의 비교 연산자는 요소를 비교하여 정렬합니다.
let numbers = [5, 2, 8, 1, 7]
let sortedNumbers = numbers.sorted { $0 < $1 }
print(sortedNumbers) // 출력: [1, 2, 5, 7, 8]

2. 필터링

  • 두 번째 활용 예제는 배열 요소의 필터링입니다. filter 메서드는 클로저를 사용하여 조건에 맞는 요소만 추출합니다. 이 경우 $0.count는 각 문자열의 길이를 나타내며, 클로저 내부의 조건에 따라 필터링이 이루어집니다.
let names = ["Alice", "Bob", "Charlie", "David", "Eve"]
let filteredNames = names.filter { $0.count <= 3 }
print(filteredNames) // 출력: ["Bob", "Eve"]

3. 비동기 작업

  • 세 번째 활용 예제는 비동기 작업을 수행하는 것입니다. URLSession을 사용하여 비동기로 웹 페이지 데이터를 가져오는 코드입니다. 클로저는 데이터 수신 또는 에러 처리를 담당하며, 비동기 작업이 완료될 때 클로저가 실행됩니다.
import Foundation

let task = URLSession.shared.dataTask(with: URL(string: "https://www.example.com")!) { data, response, error in
    if let data = data {
        print("Received data: \(data)")
    } else if let error = error {
        print("Error: \(error)")
    }
}
task.resume()

클로저는 Swift에서 강력한 기능 중 하나로, 코드의 모듈화, 비동기 작업, 데이터 처리, 정렬, 필터링, 네트워킹 등 다양한 상황에서 활용됩니다. 함수형 프로그래밍의 핵심 개념 중 하나인 클로저를 활용하여 코드를 간결하게 작성하고 더 유연한 프로그래밍을 할 수 있습니다.

0개의 댓글