적당한 고통은 희열이다

- 댄 브라운 '다빈치 코드' 중에서

Swift iOS 앱 개발/iOS

[Swift iOS] OperationQueue에 대하여 (+ BlockOperation, AsyncOperation)

hongssup_ 2023. 2. 20. 23:17
반응형

OperationQueue 오퍼레이션큐

OperationQueue
: A queue that regulates the execution of operations. 오퍼레이션의 실행을 규제하는(?) 대기열 큐

 

BlockOperation 블락오퍼레이션

BlockOperation 
: An operation that manages the concurrent execution of one or more blocks.

내부에 block(클로저)을 내장하고 있는 오퍼레이션 클래스

기본 설정은 동기적(sync)이지만, 다른 큐로 보내서 비동기적으로 실행하는 것도 가능

작업이 모두 종료 되었을 때 알려준다는 점에서 디스패치 그룹과 유사하게 동작한다고 볼 수 있다. (기능은 더 많음)

 

각 block은 디폴트 글로벌 큐에서 동작한다. (concurrent 큐의 DispatchQueue.global() )

 

AsyncOperation 비동기 오퍼레이션

오퍼레이션 내에 비동기 함수를 내장하는 경우도 있다. 

오퍼레이션 큐가 동기를 기본으로 하기에 맞지 않다고 생각할 수도 있지만, 이미지 다운로드하고 압축을 푼다거나 할 때 비동기로 작업들을 처리하고 다음 작업으로 넘어가야하는 경우도 있을 수 있음. 

작업 상태 관리 프로퍼티 관찰한다음 task 프로퍼티 수동으로 관리해주어야. 

오퍼레이션을 오퍼레이션 큐에 넣어 다른 쓰레드로 보내 비동기적으로 처리를 경우, 제대로 일이 끝난 시점을 잘못 감지할 있어 상태 관리를 수동으로 해주어야 한다. 

오퍼레이션 큐는 기본적으로 뒷 작업이 앞 작업에 의존하도록 설정을 해줘서 순서를 관리한다. 기본적으로는 동기적으로 처리가 되지만, 다운로드 파일들을 모아 압축을 푼다거나 하는 경우에, 오퍼레이션 큐에서도 비동기 작업을 구현해주어야 한다. 

이럴 파일들을 다운로드하는 비동기 오퍼레이션이 끝나는 시점을 관리해야, 다음 작업이 일을 시작할 있도록 해주어야 한다. 

 

오퍼레이션 큐의 주요 기능

- 순서 관리

- 작업 취소

728x90
반응형