Swift - 병렬 프로그래밍(Concurrency Programming) 가이드
병렬 프로그래밍(Concurrency Programming) 이란 멀티스레딩 혹은 멀티프로세싱이란 말과 비슷한 개념이다. 백그라운드(background) 혹은 비동기(Asynchronous)로 작업을 처리한다던가, 동시에 여러가지 일을 처리하도록 하려면 이 병렬 프로그래밍에 대해 알아야한다. 여기서는 Swift에 한정해서 다룬다.
참고로 스위프트가 쓰였기 때문에 SDK 버전 제한은 OS X 10.10(요세미티)와 iOS 8.0이 된다고 생각된다. 따라서 기존 Objective-C 방식과 약간의 차이가 있을 수 있다. 하지만 Objective-C를 사용하던 기존과 큰 차이는 없다.
멀티스레딩은 여러 면에서 좀 귀찮은 점이 있다. 모든 작업마다 스레드를 만드는 건 병렬 프로그래밍에서 비효율을 유발 할 수도 있고 그래서 귀찮게 스레드풀(Thread Pool)을 관리해야 하는 것도 더 큰 귀찮음을 유발한다.
물론 전통적인 설계를 따른다면 스레드도 나쁜 선택은 아니다.
[상세글] Swift - NSThread 병렬 프로그래밍 기초
멀티스레딩의 스레드 풀 관리 스트레스에 지친다면 좋은 대안이다.
[상세글] Swift - NSOperationQueue 병렬 프로그래밍 기초
참고로 아래의 글들은 Swift 3 를 기준으로 업데이트 하였다. Swift 3 에서는 함수로 제공되던 것들이 클래스로 새롭게 디자인 되었다.
[상세글] Swift - GCD(Grand Central Dispatch) 기초
[상세글] Swift - Dispatch Queue
[상세글] Swift - Dispatch Group
[상세글] Swift - GCD 세마포어(Dispatch Semaphore)
큰 변화는 아니지만 기존 코드 변경이 필요하다는 이이야기다.
[관련글] 스위프트(Swift) 가이드
참고로 스위프트가 쓰였기 때문에 SDK 버전 제한은 OS X 10.10(요세미티)와 iOS 8.0이 된다고 생각된다. 따라서 기존 Objective-C 방식과 약간의 차이가 있을 수 있다. 하지만 Objective-C를 사용하던 기존과 큰 차이는 없다.
세 가지 기법
애플은 병렬 프로그래밍을 위해 대략 3가지 기술을 제공한다.- 스레드(Thread): NSThread
- NSOperationQueue
- GCD(Grand Centeral Dispatch)
NSThread
전 언어를 통들어 일반적으로 많이 쓰이는 병렬프로그래밍 기술은 아마도 멀티스레드(Multi Threading)인 것 같다. 물론 애플도 멀티스레드를 위한 NSThread 클래스를 제공한다.멀티스레딩은 여러 면에서 좀 귀찮은 점이 있다. 모든 작업마다 스레드를 만드는 건 병렬 프로그래밍에서 비효율을 유발 할 수도 있고 그래서 귀찮게 스레드풀(Thread Pool)을 관리해야 하는 것도 더 큰 귀찮음을 유발한다.
물론 전통적인 설계를 따른다면 스레드도 나쁜 선택은 아니다.
[상세글] Swift - NSThread 병렬 프로그래밍 기초
NSOperationQueue
작업 큐(Operation Queue) 라는 방식으로 병렬 프로그래밍을 하기 위한 개념이다. 큐에다 단일 작업을 필요한 것 만큼 넣어놓으면 알아서 척척 꺼내서 별도의 스레드에서 실행시켜준다. 개인적으로 가장 OOP에 어울리는 기술이라고 생각한다.멀티스레딩의 스레드 풀 관리 스트레스에 지친다면 좋은 대안이다.
[상세글] Swift - NSOperationQueue 병렬 프로그래밍 기초
GCD Dispatch
개념적으로 본다면 NSOperationQueue와 NSOperation을 사용하는 것과 거의 비슷하다. 하지만 구현이 더 간단하다는 크나큰 장점이 있다. 특징적으로 C API (즉 함수)로 구성되어 있고 클로져를 많이 활용한다.참고로 아래의 글들은 Swift 3 를 기준으로 업데이트 하였다. Swift 3 에서는 함수로 제공되던 것들이 클래스로 새롭게 디자인 되었다.
[상세글] Swift - GCD(Grand Central Dispatch) 기초
[상세글] Swift - Dispatch Queue
[상세글] Swift - Dispatch Group
[상세글] Swift - GCD 세마포어(Dispatch Semaphore)
OS X 10.10, iOS 8 SDK로 오면서 생긴 변화(Xcode 6 Beta 3 기준)
기존 NSThread와 NSOperation 클래스에서 제공되던 isCancelled() 라는 메소드가 사라졌다. 대신 cancelled 프로퍼티가 새롭게 추가되었다. isCancelled() 메소드가 cancelled 프로퍼티로 변했다고 하는 표현이 맞을지도 모르겠다. 어차피 값은 동일하고 용도도 동일하다.큰 변화는 아니지만 기존 코드 변경이 필요하다는 이이야기다.
[관련글] 스위프트(Swift) 가이드
댓글