[swift] 클로저를 이용한 코드 재사용성 향상

클로저(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은 배열의 각 요소를 의미하며, 반환값으로는 제곱한 결과를 반환합니다.

클로저의 장점

클로저를 사용하면 코드의 재사용성을 높일 수 있습니다. 함수와 마찬가지로 클로저도 코드 블록을 캡슐화할 수 있기 때문에, 동일한 로직을 반복해서 작성하지 않아도 됩니다. 또한, 클로저는 변수와 상수를 캡처하여 사용할 수 있는 특징을 가지고 있어, 외부 범위에서 정의된 변수와 상수를 사용하는 경우에 유용합니다.

결론

클로저를 적절히 활용하면 코드의 재사용성을 향상시킬 수 있습니다. 앞으로 스위프트 개발을 하면서 클로저를 사용해보고, 다양한 상황에서 유용하게 활용해보세요.