[swift] Swift PromiseKit로 비동기 작업 강제 종료 방법

비동기 작업은 종종 오랜 시간이 걸리는 작업이거나 외부 서비스와의 통신 시 발생할 수 있는 동작입니다. 이러한 경우, 작업이 너무 오래 걸리거나 사용자의 요청에 따라 중단해야 할 수도 있습니다. Swift에서는 PromiseKit라는 비동기 작업을 관리하는 프레임워크를 사용하여 작업을 강제로 종료할 수 있습니다.

PromiseKit란?

PromiseKit는 비동기 작업을 처리하기 위한 프레임워크로, Swift에서 즉시 값 또는 비동기 작업의 결과를 반환하는 데 사용됩니다. PromiseKit은 비동기 작업을 처리하기 위해 비동기 작업을 체인으로 연결하여 처리하고, 비동기 작업이 성공인지 실패인지에 따라 다른 작업을 수행할 수 있게 해줍니다.

비동기 작업 강제 종료

PromiseKit에서 비동기 작업을 강제로 종료하기 위해선 Cancellable 프로토콜을 구현하는 객체를 만들어야 합니다. 이 인터페이스는 cancel() 메서드를 제공하여 작업이 강제로 종료되도록 합니다. 다음은 Cancellable 프로토콜의 예입니다.

protocol Cancellable {
    func cancel()
}

비동기 작업을 수행하는 함수는 Cancellable 객체를 반환해야 합니다. Cancellable 객체는 비동기 작업을 취소하는 데 사용될 수 있습니다. 예를 들어, 외부 서비스와의 통신을 위한 비동기 작업을 수행하는 함수는 다음과 같이 정의할 수 있습니다.

func performAsyncTask() -> Promise<ResponseType> {
    return Promise<ResponseType> { seal in
        // 비동기 작업 수행
        
        if shouldCancel {
            seal.reject(CancellationError.requestCancelled)
        } else {
            seal.fulfill(response)
        }
    }
}

Cancellable 객체를 구현하여 비동기 작업을 취소하는 간단한 예시를 보여드립니다.

class MyCancelable: Cancellable {
    var isCancelled: Bool = false
    
    func cancel() {
        isCancelled = true
    }
}

let cancelable = MyCancelable()

작업 취소하기

여기서 cancelable 객체는 비동기 작업을 취소하는 데 사용됩니다. 만약 작업을 취소하려면 다음과 같이 cancel() 메서드를 호출합니다.

cancelable.cancel()

비동기 작업이 실행 중이면, 작업이 중단될 것이고 Cancellable 객체의 isCancelled 속성은 true로 설정됩니다. 이를 확인하여 작업을 종료하거나 다른 작업을 수행할 수 있습니다.

결론

Swift PromiseKit을 사용하면 비동기 작업을 강제로 종료할 수 있습니다. Cancellable 프로토콜을 구현하는 객체를 작성하고, 이를 활용하여 원하는 시점에 비동기 작업을 취소할 수 있습니다. 이를 통해 오래 걸리거나 불필요한 작업을 중단하고, 보다 빠르고 효율적인 코드를 작성할 수 있습니다.

참고 자료