클로저(Closure)는 스위프트에서 매우 강력한 기능 중 하나로, 코드의 재사용성을 향상시킬 수 있는 방법 중 하나입니다. 클로저는 일반적으로 함수 내부에서 선언되는데, 이름이 없는 함수라고 생각할 수 있습니다.
클로저의 구조
클로저는 중괄호 {}
로 감싸진 코드 블록이며, 매개변수와 반환값을 가지고 있을 수 있습니다. 클로저의 구조는 다음과 같습니다.
{ (매개변수) -> 반환값 in
// 실행될 코드
}
위와 같이 클로저는 중괄호 내에 매개변수의 타입 선언과 반환값의 타입 선언이 있는데, in
키워드를 사용하여 매개변수 타입과 반환값 타입을 코드와 구분지어줍니다.
클로저의 활용
클로저는 다양한 상황에서 유용하게 활용될 수 있습니다. 예를 들어, 배열의 요소들을 정렬할 때 클로저를 사용할 수 있습니다.
let names = ["Tom", "Jerry", "Alice", "Bob"]
let sortedNames = names.sorted {
$0 < $1
}
print(sortedNames) // ["Alice", "Bob", "Jerry", "Tom"]
위의 코드에서는 sorted
메서드를 호출할 때 클로저를 전달하여 배열의 요소들을 알파벳순으로 정렬합니다. 클로저 내에서 $0
과 $1
은 각각 배열의 요소를 의미하며, 반환값은 요소들을 비교하여 정렬 순서를 결정합니다.
또 다른 예로는 클로저를 사용하여 스위프트의 map
함수를 활용하는 것이 있습니다.
let numbers = [1, 2, 3, 4]
let squaredNumbers = numbers.map { $0 * $0 }
print(squaredNumbers) // [1, 4, 9, 16]
위의 코드는 numbers
배열의 모든 요소를 제곱하여 새로운 배열을 생성합니다. 클로저 내에서 $0
은 배열의 각 요소를 의미하며, 반환값으로는 제곱한 결과를 반환합니다.
클로저의 장점
클로저를 사용하면 코드의 재사용성을 높일 수 있습니다. 함수와 마찬가지로 클로저도 코드 블록을 캡슐화할 수 있기 때문에, 동일한 로직을 반복해서 작성하지 않아도 됩니다. 또한, 클로저는 변수와 상수를 캡처하여 사용할 수 있는 특징을 가지고 있어, 외부 범위에서 정의된 변수와 상수를 사용하는 경우에 유용합니다.
결론
클로저를 적절히 활용하면 코드의 재사용성을 향상시킬 수 있습니다. 앞으로 스위프트 개발을 하면서 클로저를 사용해보고, 다양한 상황에서 유용하게 활용해보세요.