Swift: Operation / OperationQueue

Wooyo·2023년 10월 30일
0
post-thumbnail

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)

// orderBar.addOperations([order1, order2, order3, order4, order5], waitUntilFinished: true)

3. Operation 만들기 / 실행시키기

  • BlockOperation 사용하기
class BlockOperation : Operation

// 만들기 예시
let operation = BlockOperation {
    // some code
}

// BlockOperation의 메서드
// operation 동작 후 원하는 코드 실행
operation.addExecutionBlock {
    // some code to be executed after the operation operation.
}

// Operation의 프로퍼티
// operation + executionBlock 실행 후 원하는 코드 실행
operation.completionBlock = {
    // some code to be executed after the operation and executionBlocks
}
  • operation 실행하기
// 직접 실행하기
operation.start()

// OperationQueue로 실행하기
let operationQueue = OperationQueue()
operationQueue.addOperation(operation)
  • 수동 operation 사용은 권장되는 방식이 아님으로 지양 할 것
profile
Wooyo의 개발 블로그

0개의 댓글