Operation은 GCD 위에서 동작한다. 👉 GCD를 객체지향적으로 관리하는 high-level의 API
Operation
⇒ GCD의 코드블록(Task - 수행해야 할 작업)들을 캡슐화, 객체화(타입화)한 것
코드 블록을 객체화함으로써 Operation은 아래와 같은 장점들을 갖는다. (OOP의 장점과 유사)
Operation을 사용하면 동시성 프로그래밍과 관련된 모든 작업들은 Operation이라는 객체로서 만들어지게 됨
→ 객체 각각을 직접 실행시키거나 OpertaionQueue에 넣어서 실행 및 관리 가능

요리사는 동시에 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)
