Operation | Apple Developer Documentation

Operation은 GCD를 객체지향적으로 재탄생 시킨 것.

동시성 프로그래밍에 관련된 작업을 Operation이라는 객체로 만들어 놓고 사용할 수 있다.

하나씩 Operation을 사용할 수도 있고, OperationQueue를 사용해 GCD처럼 관리 및 실행 할 수 있다.

관련 작업을 객체로 만들고 Queue를 사용해서 관리하는 것은 사실

GCD에도 작업을 객체로 만들어주는 DispatchWorkItem이 있다 이 둘은 뭐가 다른것인가?

Operation - DispatchWorkItem

먼저 Operation은 DispatchWorkItem 보다 먼저 나왔다.

둘이 다른 큰 이유 중 하나는 Operation은 객체지향적으로 설계되어 좀 더 세부적으로 스케쥴링을 할 수 있다.

Operation

class Operation: NSObject

Operation은 추상클래스여서 항상 상속받는 클래스를 만들어서 사용해야한다.

커스텀 클래스로 직접 만들어 주거나, BlockOperation이라는 하위 클래스를 사용해 만들수도 있다.

class BlockOperation: Operation

Operation을 생성하는 코드

let operation = BlockOperation {
    // some code
}

// BlockOperation의 메서드
operation.addExecutionBlock {
    // some code to be executed after the operation operation.
}

// Operation의 프로퍼티
operation.completionBlock = {
    // some code to be executed after the operation and executionBlocks
}

첫번째 BlockOperation을 생성하는 부분은 BlockOperation{} 안에 작업할 코드를 작성해 객체화 할 수 있다.