Notice
Recent Posts
Recent Comments
Link
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Archives
Today
Total
관리 메뉴

Jupyo's Daily Story

OperationQueue 본문

Swift

OperationQueue

JangJupyo 2024. 9. 26. 15:01
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