1. operation
- GCD를 객체지향적으로 진화시킨 high leval api
- GCD를 캡슐 / 객체화 해낸것
- operation을 사용하면 동시성 프로그래밍과 관련된 모든 작업들은 Operation 객체로 생성
- Operation 객체는 각각 직접 실행 가능 + OperationQueue에서 실행 / 관리가 가능
- Operation은 추상 클래스로 상속받는 타입을 사용해야함
- 직접 클래스 커스텀 / BlockOperation 이라는 하위 클래스 사용하는 방식이 존재
장점:
- 재사용 용이
- 타입 간 관계 생성 가능
- 다양한 프로퍼티 활용 가능
- 스케줄링 용이
class Operation : NSObject
2. 주문으로 보는 OperationQueue
- 식당의 주문표를 생각하여 요리사는 주문하는 코드로 예시
- 한번에 주문은 2개씩 소화가능
import Foundation
let order1 = BlockOperation {
print("돈까스")
print("떡볶이")
}
let order2 = BlockOperation {
print("튀김 우동")
}
let order3 = BlockOperation {
print("알리오 올리오")
print("생맥주 2")
}
let order4 = BlockOperation {
print("과일 세트")
print("LA 갈비")
}
let order5 = BlockOperation {
print("김치전")
print("바닐라 아이스크림")
}
let orderBar = OperationQueue()
orderBar.maxConcurrentOperationCount = 2
orderBar.addOperation(order1)
orderBar.addOperation(order2)
orderBar.addOperation(order3)
orderBar.addOperation(order4)
orderBar.addOperation(order5)
3. Operation 만들기 / 실행시키기
class BlockOperation : Operation
let operation = BlockOperation {
}
operation.addExecutionBlock {
}
operation.completionBlock = {
}
operation.start()
let operationQueue = OperationQueue()
operationQueue.addOperation(operation)
- 수동 operation 사용은 권장되는 방식이 아님으로 지양 할 것