Operation은 GCD 위에서 동작한다. 👉 GCD를 객체지향적으로 관리하는 high-level의 API

Operation ⇒ GCD의 코드블록(Task - 수행해야 할 작업)들을 캡슐화, 객체화(타입화)한 것

코드 블록을 객체화함으로써 Operation은 아래와 같은 장점들을 갖는다. (OOP의 장점과 유사)

  1. 재사용 용이
  2. 타입 간의 관계 설정
  3. 다양한 프로퍼티 활용
  4. 스케줄링에 용이

Operation

Operation을 사용하면 동시성 프로그래밍과 관련된 모든 작업들은 Operation이라는 객체로서 만들어지게 됨

→ 객체 각각을 직접 실행시키거나 OpertaionQueue에 넣어서 실행 및 관리 가능

요리사는 동시에 2개의 주문표까지 처리 가능

요리사는 동시에 2개의 주문표까지 처리 가능

import Foundation

let order1 = BlockOperation {
    print("1️⃣ 돈까스")
    print("1️⃣ 떡볶이")
}

let order2 = BlockOperation {
    print("2️⃣ 튀김 우동")
}

let order3 = BlockOperation {
    print("3️⃣ 알리오 올리오")
    print("3️⃣ 생맥주 2")
}

let order4 = BlockOperation {
    print("4️⃣ 과일 세트")
    print("4️⃣ LA 갈비")
}

let order5 = BlockOperation {
    print("5️⃣ 김치전")
    print("5️⃣ 바닐라 아이스크림")
}

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)

Untitled