안녕하세요, 루피입니다.이번 포스팅은 Swift Concurrency 2번째 시간입니다. 오늘은 Task의 지연 실행에 대해 깊이 있게 다뤄보겠습니다. 바로 시작합니다.왜 Task 지연이 필요할까?다음과 같은 상황에서 지연 실행이 필요합니다.검색 디바운싱: 사용자가 타이핑을 멈춘 후 0.3초 뒤 검색 실행로딩 스피너 지연 표시: 빠른 작업 시 UI 깜빡임 방지툴팁 표시 지연: 사용자가 버튼 위에 1초간 머물 때만 표시네트워크 재시도: 실패 후 일정 시간 대기 후 재시도이런 패턴들은 사용자 경험을 크게 개선하며, 팀 협업 환경에서 일관된 UX를 제공하는데 중요한 역할을 합니다.Task 지연 시키기대부분의 경우, 우리는 다양한 비동기 작업들이 생성된 후 가능한 빨리 시작되기를 원하지만, 때로는 실행에 약간의..
iOS/Swift
안녕하세요, 루피입니다.이번 포스팅부터 Swift Concurrency에 대해 학습해보려 하는데요, 이전에 한번 정리한 적이 있지만, 좀 더 체계적인 방법으로 정리해보고자 합니다.Swift 5.5부터 도입된 Swift의 내장된 Concurrency 시스템은 가볍지만 효율적인 동시성 코드를 작성할 수 있도록 도와줍니다.기존 GCD와 OperationQueue의 복잡성을 해결하고, 더 안전하고 직관적인 비동기 프로그래밍을 가능하게 합니다.기존 방식의 한계점기존 GCD 방식에서는 다음과 같은 복잡성이 있었습니다.// 기존 GCD 방식의 문제점DispatchQueue.global().async { let data = self.fetchData() DispatchQueue.main.async { [we..
안녕하세요, 루피입니다. 오늘은 Concurrency의 핵심 개념인 메인 스레드에 대해 알아보겠습니다.모든 프로그램의 시작점, 메인 스레드모든 프로그램은 실행될 때 최소 하나 이상의 Thread를 갖게 되는데, 이 첫 번째 스레드를 바로 Main Thread라고 부릅니다. 간단한 커맨드라인 앱은 메인 스레드 하나만으로 모든 작업을 마칠 수 있지만, iOS 앱처럼 복잡한 프로그램은 여러 스레드를 사용합니다. 하지만 어떤 경우든, 앱이 실행되는 동안 메인 스레드는 항상 존재합니다. UI 작업은 메인 스레드에서가장 중요한 규칙입니다. 모든 UI 관련 작업(은 반드시 메인 스레드에서 처리해야 합니다. '가끔'이 아니라 '항상'입니다. 만약 다른 스레드에서 UI를 업데이트하려고 하면 어떻게 될까요?아무 일도 일어..
안녕하세요, 루피입니다! 오늘은 Swift 동시성 과 병렬성에 대해 간단하게 정리해보겠습니다. 바로 시작합니다.단일 코어 CPU 일때단일 코어 CPU인 컴퓨터를 사용할 때, 우리는 컴퓨터가 여러 작업을 동시에 돌아가는 것과 같은 경험을 하게 됩니다.예를 들어, 우리는 인터넷을 쓰면서, 음악도 같이 틀어 놓을 수 있죠!! 하지만, 사실은 그렇지 않습니다. 단일 코어 CPU는 한 번에 딱 한가지 일만 할 수 있기 때문입니다.한 앱이 시작해서 살짝 작업을 진행하다 멈추고, 다른 앱이 시작해서 조금 진행하다 멈추고, 이러한 방식으로 반복하는 것입니다. CPU가 프로그램들 사이를 워낙 빨리 오가니깐 겉보기에는 다 같이 돌아가는 것처럼 느끼는 것뿐이죠. 이러한 개념이 바로 동시성입니다.두 번째 코어가 추가 된다면?..
안녕하세요, 루피입니다! 오늘은 Dispatch Work Item에 대해 정리해 보는 시간을 가져보도록 하겠습니다. 바로 시작합니다.Dispatch Work Item 이란?수행하고 싶은 작업을 캡슐화해서, 완료 핸들러나 실행 의존성을 붙일 수 있게 해주는 도구입니다.Dispatch Work Item은 디스패치 큐나 디스패치 그룹에서 실행할 작업을 깔끔하게 묶어 놓은 것이라고 생각하면 편합니다..init { qos: DispatchQoS = .unspecified, flags: DispatchWorkItemFlags = [], block: @escaping () -> Void}매개변수 (Parameters)qos : 작업 아이템의 실행 우선순위를 정할 때 쓰이는 클래스예요. 이 작업이 얼마나 급한지 시스템..
안녕하세요, 루피입니다. 오늘은 Dispatch Group에 대해 공부해 보겠습니다. 바로 시작합니다.Dispatch Group 이란?여러 작업을 하나의 단위로 묶어서 관리하고 모니터링할 수 있게 해 주는 도구입니다. 쉽게 말해, 여러 작업이 모두 끝날 때까지 기다리거나 그 진행 상황을 한꺼번에 파악하고 싶을 때 사용할 수 있는 기능입니다. 순서를 간략하게 정리해 보겠습니다!!그룹은 여러 작업을 하나로 묶어서 관리하고, 그 그룹에 맞춰 동작을 동기화할 수 있게 해 줍니다.여러 개의 작업 항목을 그룹에 추가한 뒤, 같은 큐나 서로 다른 큐에서 비동기적으로 실행되도록 설정해 줍니다. 모든 작업 항목이 실행을 마치면 그룹은 완료 핸들러를 실행합니다. 또는 그룹 내 모든 작업이 끝날 때까지 동기적으로 기다릴 수..
안녕하세요, 루피입니다! 오늘은 Dispatch Queue의 종류에 대해 정리해 보겠습니다. 바로 시작합니다.시작하기 전에..많은 분들이 큐의 종류를 헷갈려 하십니다. 이렇게 정리하면 쉽습니다! Dispatch Queue라는 큰 우산 아래, 작업 처리 방식에 따라 Serial Queue와 Concurrent Queue로 나뉩니다.Serial Queue: 한 번에 하나의 작업만 순서대로 처리합니다.Concurrent Queue: 여러 작업을 동시에 처리할 수 있습니다. 그리고 이 기본적인 두 특성을 바탕으로 시스템이 제공하는 큐와 우리가 직접 만드는 큐가 있습니다.시스템 제공 큐:Main Queue: 시스템이 기본으로 제공하는 Serial Queue.Global Queue: 시스템이 기본으로 제공하는 Co..
안녕하세요, 루피입니다. 오늘은 지난 글을 작성하면서 생겼던 궁금증을 해결해보는 시간을 가져보도록 하겠습니다. 바로 시작합니다.궁금증 발생Dispatch Queue에 대해 공부하면서 Concurrent + Sync 형태의 동작에 대해 의문을 가지게 되었습니다.Button("concurrent - sync") { print("A") concurrentQueue.sync { sleep(3) print("B") } print("C")}문제의 그 코드입니다.❓저의 생각은 이렇습니다. (처음 생각)❓Concurrent는 단일 Thread가 아닌 여러 Thread에 작업을 할당하는 Queue의 종류입니다. 즉, 직렬의 방식이 아닌 병렬의 방식으로 작업을 분배합니다. Sync는 등록한 ..
안녕하세요, 루피입니다. 오늘은 저번 시간에 이어 DispatchQueue에 대해 공부해 보도록 하겠습니다. 만약에 이해가 잘 가지 않는다면, 저번 글 을참고하시면 좋을 거 같습니다! 바로 시작하겠습니다.DispatchQueue란?DispatchQueue가 무엇인지에 대해 작성하기에 앞서 저번 글에 있던 내용을 상기시켜 보도록 하겠습니다.GCD(Grand Central Dispatch)는 멀티코어 하드웨어의 자원을 효율적으로 활용할 수 있게 도와주는 시스템 수준의 기술입니다. 간단하게 말해, GCD를 사용하면 여러 코어에 걸쳐 작업을 병렬 처리할 수 있습니다. 우리는 GCD 덕분에 Thread 관리나 스케줄링에 대한 고민을 줄이고 DispatchQueue에 작업을 할당하면 GCD가 알아서 동시성 프로그..
안녕하세요, 루피입니다. 오늘은 GCD에 대해 공부해 보겠습니다. 바로 시작합니다.GCD가 무엇인가?GCD(Grand Central Dispatch)는 멀티코어 하드웨어의 자원을 효율적으로 활용할 수 있게 도와주는 시스템 수준의 기술입니다. 간단하게 말해, GCD를 사용하면 여러 코어에 걸쳐 작업을 병렬 처리할 수 있습니다. 많은 분들이 GCD와 Dispatch라는 용어를 같은 맥락으로 이해하는데, 공식 문서에서도 그렇게 설명하고 있네요.GCD를 우리는 왜 알아야 하는가?만약 우리가 오직 메인 스레드만을 이용해 앱을 만든다면 어떨까요? 간단한 앱에서는 큰 문제가 없을 수 있지만, 네트워크 통신이나 여러 Task를 동시에 처리해야 하는 복잡한 앱에서는 상황이 달라지게 되는데요!메인 스레드가 모든 업무를 ..