[swift] Swift에서 비동기 작업을 위한 작업 취소 방법

스위프트(Swift)에서 비동기 작업을 수행할 때, 종종 작업을 취소해야 할 때가 있습니다. 이 글에서는 스위프트에서 비동기 작업을 취소하는 방법을 알아보겠습니다.

DispatchWorkItem을 사용한 작업 취소

스위프트에서 비동기 작업을 취소하기 위해 DispatchWorkItem을 사용할 수 있습니다. DispatchWorkItem은 단일 작업을 나타내는 클래스로, 작업을 생성하고 실행할 수 있습니다. 작업 취소가 필요한 경우, 해당 작업 객체를 사용하여 작업을 취소할 수 있습니다.

다음은 DispatchWorkItem을 사용하여 비동기 작업을 취소하는 예제 코드입니다:

let workItem = DispatchWorkItem {
    // 비동기 작업 내부에서 수행할 코드
}

// 작업을 비동기 큐에 추가
let queue = DispatchQueue(label: "com.example.myQueue")
queue.async(execute: workItem)

// 작업 취소
workItem.cancel()

위의 코드에서 DispatchWorkItem을 만들고 작업을 정의한 후, 해당 작업을 비동기 큐에 추가합니다. 작업을 취소하기 위해 workItem.cancel()을 호출합니다.

Operation을 사용한 작업 취소

스위프트에서 비동기 작업을 조금 더 강력하게 제어하기 위해 Operation을 사용할 수도 있습니다. Operation은 작업을 나타내는 추상 클래스로, 작업의 실행과 상태 제어를 통합적으로 관리할 수 있습니다.

다음은 Operation을 사용하여 비동기 작업을 취소하는 예제 코드입니다:

class MyOperation: Operation {
    override func main() {
        if isCancelled {
            return
        }
        
        // 비동기 작업 내부에서 수행할 코드
    }
}

// 작업 객체 생성
let operation = MyOperation()

// 작업 큐에 추가
let queue = OperationQueue()
queue.addOperation(operation)

// 작업 취소
operation.cancel()

위의 코드에서 MyOperation 클래스를 정의하고, Operation 클래스를 상속받아 작업을 정의합니다. main() 메서드 내에서 작업을 수행하기 전에 isCancelled 프로퍼티를 사용하여 작업이 취소되었는지 확인합니다. 작업을 취소하기 위해 operation.cancel()을 호출합니다.

참고 자료

이 글에서는 스위프트에서 비동기 작업을 취소하는 두 가지 방법을 알아보았습니다. DispatchWorkItem을 사용하면 단순한 비동기 작업 취소를 처리할 수 있고, Operation을 사용하면 더 복잡한 비동기 작업을 관리할 수 있습니다. 필요에 따라 적절한 방법을 선택하여 비동기 작업을 취소할 수 있습니다.