분류 전체보기
-
동시성 프로그래밍(7) OperationiOS 2022. 3. 15. 20:49
안녕하세요. 지난 시간까지는 GCD를 이용한 동시성 프로그래밍에 대해서 배웠습니다. 이제부터는 동시성 프로그래밍을 위한 또 다른 방법, Operation에 대해서 알아보겠습니다. 1. GCD와의 차이 GCD를 이용해 동시성 프로그래밍을 할 수 있는데 Operation은 왜 필요할까요? Operation도 내부적으로는 GCD를 이용해 동작합니다. 하지만 Operation은 GCD가 할 수 없는 조금 더 복잡한 일을 할 수 있습니다. 우선 Operation은 데이터와 기능을 캡슐화한 클래스입니다. 따라서 작업의 재사용성이 향상됩니다. 이미지 다운로드와 같이 반복되는 작업의 경우 Operation으로 정의해놓으면 Operation을 인스턴스화 하는 것만으로 작업을 생성할 수 있는 것이죠. 또한 Operatio..
-
동시성 프로그래밍(6) Race Condition(경쟁 상태) 해결 방법iOS 2022. 3. 9. 20:14
안녕하세요. 저번 시간에는 동시성 프로그래밍을 하면서 발생할 수 있는 문제들에 대해서 알아보았는데요. 이번 시간에는 그러한 문제들을 해결하여 Thread-Safe한 코드를 작성하는 방법을 알아보겠습니다. TSan(Thread Sanitizer) Xcode는 Thread Sanitizer라는 기능을 제공합니다. Sanitizer라는 단어가 낯설어서 찾아보니 살균제, 불쾌한 부분을 제거하다라는 뜻을 가지고 있더군요. 이름처럼 Thread Sanitizer는 Thread를 사용함에 있어서 불쾌한 부분, 즉 경쟁 상태가 발생하는 부분을 찾아줍니다. 사용 방법은 매우 간단합니다. Product -> Scheme -> Edit Scheme -> Run -> Diagnostics에서 Thread Sanitizer를 ..
-
동시성 프로그래밍(5) Concurrency Problems(동시성과 관련된 문제들)iOS 2022. 2. 17. 16:06
안녕하세요. 오늘은 동시성 프로그래밍을 하면서 발생할 수 있는 문제들에 대해서 알아보겠습니다. Thread-Safety https://en.wikipedia.org/wiki/Thread_safety Thread safety - Wikipedia Thread safety is a computer programming concept applicable to multi-threaded code. Thread-safe code only manipulates shared data structures in a manner that ensures that all threads behave properly and fulfill their design specifications without unintended en.w..
-
동시성 프로그래밍(4) DispatchGroup, DispatchWorkItem, DispatchSemaphoreiOS 2022. 2. 14. 22:56
안녕하세요. 저번 시간까지 DispatchQueue에 대해서 알아보았습니다. GCD = DispatchQueue라고 생각하시는 분들이 많은 거 같아요. 하지만 DispatchQueue는 Dispatch(GCD) 프레임워크의 하위 클래스 중 하나입니다. Dispatch 프레임워크에는 이외에도 많은 클래스가 있는데요. 오늘은 그중에서 DispatchGroup, DispatchWorkItem, DispatchSemaphore에 대해서 알아보겠습니다. 1. DispatchGroup https://developer.apple.com/documentation/dispatch/dispatchgroup Apple Developer Documentation developer.apple.com 작업들을 DispatchQu..
-
동시성 프로그래밍(3) DispatchQueueiOS 2022. 2. 10. 23:57
안녕하세요. 오늘은 DispatchQueue에 대해서 알아보도록 하겠습니다. https://developer.apple.com/documentation/dispatch/dispatchqueue Apple Developer Documentation developer.apple.com 개발자 분들이라면 많이 보셨을 그래프라고 생각됩니다. 2000년도 초반까지 CPU는 단일 코어로 이루어져 있었습니다. 그러나 점점 하나의 코어의 성능을 올리는데에는 한계가 왔습니다. CPU의 발열을 잡을 수 없게 된 것이죠. 표를 보시면 2000년도 중반부터 단일 쓰레드의 성능과 주파수가 수렴하는 구간이 나타나는 것을 확인할 수 있습니다. 따라서 CPU 개발사들은 하나의 코어 성능을 올리는 것을 멈추고 코어의 개수를 늘리는 방..
-
동시성 프로그래밍(2) Serial(직렬) VS Concurrency(동시)iOS 2022. 2. 4. 14:37
안녕하세요. 오늘은 Serial(직렬)과 Concurrency(동시)에 대해서 알아보도록 하겠습니다. sync/aysnc와 Serial/Concurrency를 헷갈리시는 분들이 계신 걸로 알고 있는데요. 둘은 절대 다릅니다!! sync/async는 작업에 대한 특성이라면 Serial/Concurrency는 큐(대기행렬)에 대한 특성입니다. 하나씩 알아보도록 하겠습니다. 1. Serial(직렬) Serial은 순차적인이라는 뜻을 가지고 있습니다. 따라서 Serial Queue는 들어온 작업을 순차적으로 실행시키는 Queue입니다. 코드로 확인해보겠습니다. 우선 Serial Queue를 만들겠습니다. attributes 옵션을 주지 않으면 SerialQueue가 생성됩니다. let queue = Dispat..
-
동시성 프로그래밍(1) Sync(동기) VS Async(비동기)iOS 2022. 2. 3. 16:57
안녕하세요. 오늘은 동기(Sync)와 비동기(Async)에 대해서 알아보도록 하겠습니다. 1. Sync(동기) 사실이 동기라는 단어가 잘 안와닿는데요. 사전에 synchronous라는 단어를 검색하면 동시 발생하는이라는 뜻을 가지고 있는데요. 이렇게 보면 두 개의 작업이 동시에 발생하는 게 동기 같은 느낌이 듭니다. 하지만 저희가 작성했던 DispathcQueue.global().sync는 그렇지 않자나요? 프로그래밍에서는 한 작업에 대한 요청과 응답이 동시에 발생하는 것을 동기라고 말합니다. 동시라고 설명하니깐 작업시간이 긴 작업에 대해서는 조금 이해가 되지 않을 수도 있을 것 같아요. 요청을 보낸 작업에 대해서는 응답이 올 때까지 다른 작업을 요청하지 않는다! 라고 생각하시면 될 것 같습니다. 코드로..
-
SOLID 원칙Swift 2022. 1. 28. 17:45
안녕하세요. 오늘은 SOLID 원칙에 대해서 알아보도록 하겠습니다. https://en.wikipedia.org/wiki/SOLID SOLID - Wikipedia Object-oriented programming design principles This article is about the SOLID principles of object-oriented programming. For the fundamental state of matter, see Solid. For other uses, see Solid (disambiguation). In software engineering, SOLID is a mnemoni en.wikipedia.org SOLID 원칙은 프로그래머가 소프트웨어를 유지보수와 확장..