[swift] 클로저 속성

클로저는 Swift에서 함수나 메서드를 나타낼 수 있는 블록으로, 이름이 없는 함수라고 볼 수 있습니다. 클로저를 속성으로 사용하면 유연하고 강력한 기능을 구현할 수 있습니다.

클로저 속성 정의하기

클래스나 구조체 내부에서 클로저를 속성으로 선언하려면 우선 클로저의 타입을 명시해야 합니다. 클로저 타입은 매개변수 타입과 반환 타입을 가지며, 속성의 타입 어노테이션으로 사용됩니다.

예를 들어, sort 메서드를 이용하여 배열을 정렬하는 예제를 살펴봅시다.

class Sorter {
    var sortFunction: (Int, Int) -> Bool

    init(function: @escaping (Int, Int) -> Bool) {
        self.sortFunction = function
    }

    func sortArray(_ array: [Int]) -> [Int] {
        return array.sorted(by: sortFunction)
    }
}

위 예제에서 sortFunction(Int, Int) -> Bool 타입의 클로저 속성으로 선언되었습니다.

클로저 속성 사용하기

클로저 속성은 일반적인 속성처럼 사용할 수 있습니다. 새로운 클로저를 할당하거나 기존에 할당된 클로저를 호출할 수 있습니다.

let ascendingSorter = Sorter { $0 < $1 }
let descendingSorter = Sorter { $0 > $1 }

let unsortedArray = [3, 1, 5, 4, 2]

let ascendingArray = ascendingSorter.sortArray(unsortedArray)
let descendingArray = descendingSorter.sortArray(unsortedArray)

위 예제에서 Sorter 클래스의 인스턴스를 생성하고, 다른 클로저 함수를 sortFunction에 할당하여 배열을 오름차순 및 내림차순으로 정렬할 수 있습니다.

클로저 속성은 자유롭게 교체되거나 캡처된 상태를 유지하면서 객체의 동작을 동적으로 변경하는 데 유용합니다.

클로저 속성은 함수형 프로그래밍 패러다임과 객체지향 프로그래밍 패러다임을 융합하여 더욱 강력한 기능을 구현할 수 있도록 도와줍니다.

결론

클로저 속성을 사용하여 Swift 언어의 강력한 기능을 활용하고, 객체의 동적인 동작을 유연하게 구현할 수 있습니다.

참고 자료:

이상입니다. 다른 궁금한 사항이 있으면 언제든지 물어보세요!