본문 바로가기

분류 전체보기

(340)
175. Dispatch Group, Dispatch Semaphore Dispatch Group Dispatch Queue는 추가된 작업들을 가사으이 그룹으로 관리한다. 이는 서로 다른 Queue에 추가된 작업을 동일한 그룹으로 관리하는 것도 가능하다. 이름 그대로 여러 작업을 하나로 묶는 개념이다. 따라서 묶인 모든 작업이 완료돼야 그룹이 완료된다. // // DispatchGroupViewController.swift // Concurrency Practice // // Created by Martin.Q on 2021/12/23. // import UIKit class DispatchGroupViewController: UIViewController { let workQueue = DispatchQueue(label: "WorkQueue", attributes: .c..
174. Dispatch Work Item & Dispatch Source Timer Dispatch Work Item GCD에서 Task 를 Capsule화 하는 Class이다. 이를 직접 실행할 수 있지만, 보통은 Queue나 Diaspatch Source에 추가하는 방식으로 사용한다. 취소에 관한 API를 제공하지만 효율적이지는 못하다. 만약 필요하다면 Operation Queue와 Operation을 활용해 사용하는 것이 좋다. // // DispatchWorkItemViewController.swift // Concurrency Practice // // Created by Martin.Q on 2021/12/23. // import UIKit class DispatchWorkItemViewController: UIViewController { let workQueue = Dis..
173. GCD #1 (Grand Central Dispatch) Grand Central Dispatch GCD는 Thread를 자동으로 생성하고, 효율적으로 관리하는 역할을 한다. Thread Pool을 사용하기 때문에 자원을 최대한 적게 사용하면서 빠른 성능을 제공한다. 또한, 직관적이고 단순한 API를 제공한다. GCD는 모든 애플 기기들에서 동일하게 사용할 수 있다. GCD의 핵심 객체는 Dispatch Queue이다. Task를 추가할 때는 Block의 형태로 추가하거나, Dispatch Work Item으로 Capsule화 해서 추가한다. FIFO 방식으로 Task를 관리하고, 환경과 방식에 따라 실행 순서를 제어한다. 이러한 모델을 Work-Queu Programming Model이라고 부르기도 한다. Dispatch Queue는 Task를 실행하는 방식..
172. Interoperation Dependencies Operation간의 의존성 (Interoperation Dependencies) Operation 사이의 의존성은 실행 순서를 결정한다. 의존성을 가지지 않은 Operation은 동시에 실행되고, 의존성을 가진 Operation은 이전 Operation이 완료되거나 취소된 경우 실행된다. 간단히 말하면 이전에 작성한 Complition Handeler를 통해 작동하는 Operation이 해당한다. 이들의 의존성은 단방향이며, 상호 의존은 불가능하고, 복수의 의존성을 가질 수는 있다. 이는 서로 다른 Operation Queue에 존재하더라도 유효하다. Operation Class는 이를 위한 세가지 속성을 제공한다. addDependency() 의존성을 추가할 때 사용한다. removeDependenc..
171. Operation & Operation Queue Operation Operation은 하나의 작업을 나타내는 객체이다. 일반적으로 Operation Class를 상속한 Block Operation을 사용하지만 Operation Class를 SubClassing 하고 Custom Operation을 생성해 사용하기도 한다. Operation의 장점 Operation 사이의 의존성 추가(Interoperation Dependencies) Operation들 사이에 의존성을 추가해 실행 순서를 제어할 수 있다. 실행 취소(Cancellation) Completion Handler API 제공 t Value Observing을 사용해 상태를 감시하고, 우선순위 설정에 필요한 API를 함꼐 제공한다. Operation은 Single-shot Object이다. ..
#03. 타이머 구현과 문제 파악 보호되어 있는 글입니다.
#02. Timer 구현, 이전의 문제 해결 보호되어 있는 글입니다.
#01 Design 보호되어 있는 글입니다.
[2021.12.25] 인천, 청라, 정서진 (Ricoh GR 3x) 서론 RICOH GR 3x / 포지티브 필름, 커스텀 보정 없음(못함) 인터넷을 떠돌아다니다가 '켜켜이'라는 베이크샵을 알게 된 것을 계기로, 급하게 당일치기 인천행 3인 나들이가 결성됐다. 뭔가 마음대로 안 된 것도 많았지만 재밌었고, 특히 운전한 후배님... 고생 많았어... 😇 본론 청라 베이크샵 켜켜이(KK2) 청라 뚝배기이탈리아 청라 호수공원 카페 다이브 정서진 결론 인터넷에서 뜬금 맛있는 빵집을 찾아냈다는 글을 봤는데, 그냥 공부에도 시큰둥하기도 하고... 처음 있는 일도 아니지만 성탄절에 약속도 없고, 반 장난처럼 급하게 잡은 약속이 성사돼 더 유명해지기 전에 갔다 왔다. 켜켜이(KK2) https://www.instagram.com/kk2___bake/ (제가 이 시대에 맞지 않게 SNS를..
169 ~ 170. Timer & Runloop and Concurrency Programming Timer & Runloop Timer는 지정된 주기마다 반복되는 코드를 실행할 때 사용할 수 있다. Timer가 제공하는 API는 단순하지만 Runloop에 대한 이해가 없다면 원하는 결과를 얻기 어렵다. Runloop 다양한 이벤트를 처리하기 위해 사용하는 Event Processing Loop이다. 앱이 시작되면 Main Thread에서 동작하는 Runloop가 자동으로 생성된다. Background Thread에서 Runloop가 필요한 경우 직접 구성해야 한다. Runloop는 Thread에서 발생하는 Event Source를 감시한다. iOS는 Event Source로부터 새로운 Event가 도착하면 Thread를 깨워 Runloop로 이벤트를 전달한다. 이후 Runloop는 등록된 Handl..