[swift] Operation을 이용한 비동기 작업 처리
앱을 개발하다 보면 네트워크 요청이나 파일 다운로드와 같은 비동기 작업을 처리해야 하는 경우가 많습니다. 이러한 작업을 보다 효율적으로 관리하기 위해 Operation과 OperationQueue를 사용할 수 있습니다.
Operation
Operation은 직렬 또는 병렬로 실행할 수 있는 작업의 추상화된 표현입니다. Operation 클래스는 추상 클래스이므로 직접 인스턴스를 생성할 수 없습니다. 대신에 이 클래스를 서브클래싱하여 비동기 또는 동기적으로 실행될 작업을 정의할 수 있습니다.
예를 들어, 파일 다운로드나 이미지 처리와 같은 작업을 Operation의 서브클래스로 정의하여 실행할 수 있습니다.
class ImageDownloadOperation: Operation {
var imageURL: URL
var completion: ((UIImage?) -> Void)?
init(imageURL: URL, completion: ((UIImage?) -> Void)?) {
self.imageURL = imageURL
self.completion = completion
}
override func main() {
// 이미지 다운로드 및 처리 작업 수행
let imageData = try? Data(contentsOf: imageURL)
let image = imageData.flatMap { UIImage(data: $0) }
// 완료 핸들러 호출
completion?(image)
}
}
OperationQueue
Operation을 실행하기 위해서는 OperationQueue를 사용합니다. OperationQueue는 작업을 관리하고 실행하는 객체로, Grand Central Dispatch(GCD)보다 더 높은 수준의 추상화를 제공합니다.
let imageDownloadOperation = ImageDownloadOperation(imageURL: imageURL) { image in
// 다운로드 완료 후 작업
}
let operationQueue = OperationQueue()
operationQueue.addOperation(imageDownloadOperation)
OperationQueue는 직렬 또는 병렬로 작업을 실행할 수 있으며, 작업의 의존성을 설정하여 실행 순서를 조정할 수도 있습니다.
비동기 작업을 보다 구조화되고 효율적으로 처리하기 위해 Operation과 OperationQueue를 사용하여 코드의 가독성과 유지보수성을 향상시킬 수 있습니다.
자세한 내용은 Apple Developer 문서를 참고하세요.