2015년 8월 25일 화요일

Swift - Dispatch Group

연산하는데 시간이 오래 걸리는 경우를 가정해보자. 당연히 기다리는데 지루할 것이다. 그런데 이 연산 작업을 쪼게어서 병렬로 처리하는게 가능하다면 당연히 (남는 CPU 코어를 이용해) 병렬처리 하는 것이 더 빠른 결과를 얻기 위한 방법이다.

다만, 병렬로 계산하기 때문에 모든 병렬 연산 작업이 끝나야 최종 결과물 산출이 가능해진다. 이 모든 병렬 연산이 끝나는 시점을 어떻게 파악할 것인가?

Swift - Dispatch Queue

디스패치 큐(Dispatch Queue)라는건 일종의 스레드 개념과 비슷하다. 클로져로 구성된 태스크(Task)를 이 큐(Queue)에다 등록하면 별도의 스레드에서 이 큐의 내용물을 뽑아서 해당 스레드에서 태스크를 구동시키게 해 주는 문 역활을 한다.

물론 큐가 1:1로 스레드와 연결되는 건 아니다. 큐에는 직렬큐(Serial Queue)와 병렬큐(Concurrent Queue)가 있다. 큐의 태스크는 단일 스레드에서 직렬로 돌아갈 수도 있고 병렬로 태스크 갯수 만큼의 스레드에서 모두 병렬로 돌아갈 수도 있다.

이미 GCD 기초글에서 메인큐(Main Queue)와 글로벌 큐(Global Queue)를 사용하는 방법에 대해서 다루었었는데, 이번에는 커스텀 큐를 만들어서 병렬 프로그래밍을 하는 방법 중 기초적인 것들을 알아보자. 다만 큐 생성 부분을 제외하면 기본적으로 동일하다보니 별로 볼 내용은 없을지도 모른다. -_-;

Update: Swift 3 기반의 문법으로 업데이트 하였다.

Swift 2.0 - OptionSetType

OptionSetType은 기존의 비트 단위 옵션셋을 대체하기 위해 등장한 프로토콜이다. enum이나 #define을 쓰던 때와는 다르게 struct 기반의 옵션셋 구현을 가능하게 해 준다.

Swift 2.0 - 그 외 사소한(?) 변화들

사람에 따라 사소하지 않은 변화일 수도 있지만, Swift 가 버전 1.2에서 2.0 으로 올라가는 사이에 바뀐 것들 일부를 정리해 본다. (개인적으로 큰 변화라고 느끼는 부분은 별도의 글로 정리하였으니 글 목록을 찾아보자. -_-;)

2015년 6월 30일 화요일

Swift 2.0 - CFunctionPointer 대신 클로저 사용하기

Swift 2.0 에서 개선된 사항 중 CFunctionPointer를 클로져로 대체 할 수 있다는 것이 있다. 이건 정말 큰 개선 사항이다. 왜냐하면 난 아직도 이 CFunctionPointer 타입을 다룰 줄 모르기 때문이다. -_-;;

Swift 와 C 포인터(Pointer)

Swift 는 문법으로도 다양한 기능을 제공하는 고급 언어이다. 하지만 고급 언어이기 때문(?)에 최적화된 C 라이브러리를 종종 사용해야 할지도 모르고 그럴 때는 C의 포인터를 함께 사용해야 할 가능성도 있다. 그래서 Swift의 포인터 처리에 대해 간단히 정리하려 한다.

참고로 이 글은 Swift 3 가 등장하기 이전에 쓰여졌다. Swift 3 에서의 포인터는 [Swift 속의 C Pointer 이야기 - 시작] 글을 참고하자.

2015년 6월 23일 화요일

Swift 2.0 - defer 문

아마도 Swift 2.0 들어서 문법적으로 가장 강력한 기능이 아닐까 생각하는 것이 바로 이 defer 문이다. 아 물론 개인적인 생각일 뿐이다... '-';;

2015년 6월 17일 수요일

Swift 2.0 - guard 문

Swift 2.0 에서 컨트롤 제어(Control Flow) 쪽으로 추가된 구문 중 guard 라는게 있다. if 문 같은 것과 비교하면 특별할 건 없지만 코드 읽기 차원에서 유용한 경우를 제공하기 때문에 소개해본다.

2015년 6월 11일 목요일

Swift 2.0 + Xcode 7 에서 Internal Class의 유닛테스트

Xcode 6 하에서 Swift 코드로 만들어진 프로젝트의 유닛테스트를 하려면 해당 모듈을 public으로 선언해야만 가능했다. (관련글: Swift 프로젝트의 유닛테스트(Unit Test)) 이는 Swift의 엑세스 컨트롤의 구현 의도와 Xcode에서 테스트 코드가 구성되는 방식의 의도가 다르다는 차이 때문에 발생하는 문제였다.

2015년 6월 10일 수요일

Swift 2.0 - 예외처리(Error Handling Model)

Swift 2.0 에서 드디어 예외처리 - 공식 블로그에는 Error Handling Model 이라고 표현하고 있다 - 이라는 OOP 언어라면 누구나(?) 다들 가지고 있는 기능(?)이 추가되었다. 그런데 기존 다른 언어들과는 조금 다른 모습이긴 하다