Jupyo's Daily Story
OperationQueue 본문
728x90
반응형
OperationQueue는 iOS와 macOS에서 비동기 작업을 관리하는 고수준 API입니다. 이를 통해 비동기 작업을 스케줄링하고, 우선순위 설정, 종속성 관리 등의 기능을 사용할 수 있습니다. OperationQueue는 GCD(Grand Central Dispatch)보다 더 많은 제어와 유연성을 제공합니다.
OperationQueue의 기본 개념
- Operation 객체를 사용하여 작업을 정의하고, 이를 OperationQueue에 추가하여 실행합니다.
- 큐(Queue)에 추가된 작업은 비동기적으로 실행되며, 직렬(Serial) 또는 병렬(Concurrent)로 처리될 수 있습니다.
Operation과 OperationQueue
- Operation은 작업을 표현하는 객체로, 커스텀 작업을 만들거나, 미리 제공된 BlockOperation을 사용해 쉽게 작업을 정의할 수 있습니다.
let operation = BlockOperation {
print("비동기 작업 실행")
}
- OperationQueue는 작업을 관리하고 실행하는 큐로, 직렬 또는 병렬로 설정할 수 있습니다. 또한, 작업 간의 종속성(dependency)을 설정하여 특정 작업이 완료된 후 다른 작업이 실행되도록 제어할 수 있습니다.
let queue = OperationQueue()
queue.addOperation(operation)
우선순위와 종속성 관리
- 우선순위: 각 작업은 queuePriority 속성을 통해 우선순위를 설정할 수 있습니다. 우선순위가 높은 작업이 먼저 실행됩니다.
operation.queuePriority = .high
- 종속성: 한 작업이 완료된 후에만 다른 작업이 실행되도록 설정할 수 있습니다. 이를 통해 복잡한 작업 흐름을 관리할 수 있습니다.
operation2.addDependency(operation1)
취소와 일시 중단
OperationQueue는 실행 중인 작업을 취소하거나 일시 중단할 수 있습니다. 작업을 취소하면 즉시 중단되지는 않지만, 작업이 종료 상태로 이동하게 됩니다.
operation.cancel()
병렬 및 직렬 처리
OperationQueue는 기본적으로 병렬 처리를 수행합니다. 그러나 maxConcurrentOperationCount를 1로 설정하면 직렬 처리처럼 하나의 작업이 완료된 후 다음 작업이 실행됩니다.
queue.maxConcurrentOperationCount = 1 // 직렬 처리
Operation의 장점
- 종속성 관리: Operation 간의 종속성을 설정하여 작업 순서를 쉽게 관리할 수 있습니다.
- 우선순위 제어: 작업의 중요도에 따라 우선순위를 설정할 수 있습니다.
- 취소 및 일시 정지: 작업을 중간에 취소하거나, 일시 정지/재개가 가능하다는 점에서 GCD보다 더 많은 제어가 가능합니다.
let operation1 = BlockOperation {
print("작업 1 실행")
}
let operation2 = BlockOperation {
print("작업 2 실행")
}
operation2.addDependency(operation1) // 작업 1이 끝난 후에 작업 2 실행
let queue = OperationQueue()
queue.addOperation(operation1)
queue.addOperation(operation2)
OperationQueue는 비동기 작업을 보다 세밀하게 관리할 수 있는 도구로, GCD보다 작업의 우선순위, 종속성을 쉽게 처리할 수 있습니다. 병렬 및 직렬 처리, 취소 등의 기능을 통해 비동기 작업을 더 유연하게 구현할 수 있습니다.
반응형
'Swift' 카테고리의 다른 글
클로저 (Closures) (3) | 2024.10.02 |
---|---|
Codable (0) | 2024.09.30 |
Concurrency (async/await) (3) | 2024.09.26 |
GCD (Grand Central Dispatch) (1) | 2024.09.25 |
튜플 (Tuples) (0) | 2024.09.25 |