본문 바로가기
Swift

Swift Combine에서 Debounce 사용 예제

by mr.conan 2023. 6. 19.
728x90
반응형

Swift Combine은 iOS, macOS 및 watchOS 애플리케이션에서 비동기 및 이벤트 기반 프로그래밍을 위한 강력한 프레임워크입니다. Combine의 Debounce 연산자는 입력된 값 중에서 일정 시간 동안 변경이 없을 때에만 값을 방출하는 유용한 연산자입니다. 이번 블로그에서는 Swift Combine에서 Debounce를 사용하는 방법을 예제 코드와 함께 살펴보겠습니다.

  1. Debounce란 무엇인가요? Debounce는 Combine 프레임워크에서 제공하는 연산자 중 하나로, 입력된 값 중에서 일정 시간 동안 변경이 없을 때에만 값을 방출합니다. 주로 사용자 입력과 같은 실시간 이벤트에서 유용하게 활용됩니다. 입력 값이 빈번하게 발생하는 경우, Debounce를 사용하여 값의 변동을 감지하고 일정 시간의 지연을 두어 최종 값을 처리할 수 있습니다.

Debounce 사용 방법 Debounce를 사용하기 위해 다음과 같은 단계를 따릅니다.

 

  1. Publisher에 Debounce 연산자를 적용합니다. Debounce의 매개변수로는 지연 시간과 스케줄러를 설정할 수 있습니다.
let debouncedPublisher = publisher.debounce(for: .seconds(1), scheduler: DispatchQueue.main)

2. Subscriber를 작성하고 debouncedPublisher에 Subscriber를 할당합니다.

let subscriber = Subscribers.Sink<Output, Failure>(receiveCompletion: { completion in
    // Completion 처리
}, receiveValue: { value in
    // 값 처리
})

debouncedPublisher.subscribe(subscriber)

3.Debounce 사용 예제 코드 다음은 Swift Combine에서 Debounce를 사용하는 예제 코드입니다. 예제에서는 사용자의 검색 입력을 처리하여 검색 요청을 일정 시간 동안 발생하지 않을 때에만 처리합니다.

import Combine

// 검색 입력을 처리하는 클래스
class SearchManager {
    let searchSubject = PassthroughSubject<String, Never>()
    
    func startSearching() {
        // 검색 입력 스트림에 Debounce 연산자 적용
        let debouncedPublisher = searchSubject
            .debounce(for: .seconds(0.5), scheduler: DispatchQueue.main)
        
        // 검색 결과를 처리하는 Subscriber 작성
        let subscriber = Subscribers.Sink<String, Never>(receiveValue: { query in
            // 실제 검색 요청 처리
            self.performSearch(with: query)
        })
        
        // Subscriber를 debouncedPublisher에 할당
        debouncedPublisher.subscribe(subscriber)
    }
    
    func performSearch(with query: String) {
        print("검색 요청: \(query)")
        // 실제 검색 요청 처리 로직 작성
    }
}

// 검색 입력을 테스트하는 코드
let searchManager = SearchManager()
searchManager.startSearching()

searchManager.searchSubject.send("a")
searchManager.searchSubject.send("ap")
searchManager.searchSubject.send("app")
searchManager.searchSubject.send("appl")
searchManager.searchSubject.send("apple")

위의 코드에서는 SearchManager 클래스를 사용하여 검색 입력을 처리하고, 입력 값을 Debounce 연산자를 적용한 후 검색 요청을 처리하는 예제를 보여줍니다. 입력 값이 연속적으로 발생하더라도 일정 시간의 지연을 두어 최종 검색어로 검색 요청을 처리합니다.

 

결론: Swift Combine의 Debounce 연산자는 입력 값 중에서 일정 시간 동안 변경이 없을 때에만 값을 방출하여 실시간 이벤트 처리에 유용합니다. Debounce를 사용하면 사용자 입력과 같은 빈번한 값 변경을 제어하고, 최종 값을 처리하기 위한 딜레이를 적용할 수 있습니다. Combine 프레임워크의 Debounce 연산자를 적절히 활용하여 애플리케이션의 사용자 경험을 향상시켜보세요.

728x90
반응형