iOS Developer/Concurrency6 4. async let async let VStack { ... } .onAppear { Task { await doSomething() await doSomething2() await doSomething3() ... } } 위 간단한 예시를 보면, Task 내부에서 비동기 작업들이 순차적으로 실행될 것이다. doSomething의 완료를 기다리고 -> 2가 실행되고 완료되고 나서 -> 3이 실행될 것이다. 이렇게 순차적으로 하나하나 기다리는 대신, 비동기적으로 각각의 작업이 수행되도록 할 수는 없을까? 여기서 async let을 사용할 수 있다. 먼저 URL을 통해 여러 이미지를 다운 받는 상황을 가정해보자. 네비게이션 스택 -> 스크롤뷰 -> LazyVGrid 내부에 이미지를 표시한다. import SwiftUI stru.. 2023. 7. 12. 3. Task/ .task / cancel() / priority / detached Task/ .task / cancel() / priority / detached Task에 대해 알아보고, 관련 개념 및 사용법을 살펴보자. https://developer.apple.com/documentation/swift/task Task | Apple Developer Documentation A unit of asynchronous work. developer.apple.com Task는 비동기 작업의 실행 단위이다. Task 인스턴스를 초기화 할 때 클로저를 통해 Task가 수행할 작업을 명시한다. Task는 초기화 즉시 동작을 시작하기 때문에 명시적으로 작업시작!을 해줄 필요가 없다. 또한 Task 인스턴스를 초기화 하고 나서 Task가 완료되는 것을 기다리거나 취소할 수 있다. Task가 .. 2023. 7. 12. 2. async/await/MainActor/Task async/await/MainActor/Task async와 await는 Swift에서 비동기 처리를 위한 키워드이다. async는 비동기 작업을 수행하는 함수나 메서드를 선언할 때 사용되고, await는 비동기 작업의 완료를 기다리고, 결과를 반환받을 때 사용된다. *아래 설명은 함수/메서드 구분하지 않음. 함수로 통일함 async 키워드는 비동기적으로 실행되는 코드 블럭을 표시한다. 비동기 함수는 작업을 시작하고 중간에 일시 중지되거나, 다른 작업을 수행하는 동안 '제어를 반환할 수 있다.' -> 스레드가 차단되지 않고 동시에 여러 작업을 수행할 수 있다. async 함수 내부에서 await 키워드를 만나면 비동기 작업이 완료될 때까지 비동기 함수의 실행이 일시 중단된다. 조금 더 정확히 말하면 aw.. 2023. 7. 10. 1. 비동기 처리 방법/ Completion/ Combine / async/await Completion/ Combine / async/await Swift에서 비동기 처리 방법은 다양하다. 하지만 각각의 방식들이 등장한 순서가 있어서 점차 발전/개선되는 느낌이 있다. 일반적으로 프로그램은 작업을 순차적으로 실행하는 동기적인 방식으로 동작한다. 앞에 일이 끝나야 다음 일을 한다는 것! 하지만 비동기 처리는 작업을 병렬적으로 실행하고, 작업의 완료를 기다리지 않고 다음 작업을 실행하는 것을 말한다. 작업들 중 일부가 동시에 실행되는 것을 의미! 이전 작업의 완료를 기다리지 않고! 여기서는 컴플리션 핸들러, 컴바인 그리고 async,await에 대해 알아보려 한다. 1. 컴플리션 핸들러 (Completion Handler) 컴플리션 핸들러는 이름 그대로 비동기 작업이 완료된 후 (comple.. 2023. 7. 10. 0. Do - Catch / Try / Throw 에러처리 Do - Catch / Try / Throw 에러처리 네트워킹, 비동기 처리를 하다보면 매우 자주 보이는 do - catch, try, throw에 대해 알아보자. 변천사를 알아보는 느낌으로.. 데이터를 다운받는 데이터 매니저, 그리고 뷰모델, 간단한 데이터를 보여주는 뷰가 있다고 치자. 데이터 매니저에서 데이터를 다운받는 함수가 만약 실패 가능성이 있다면 어떻게 처리할 수 있을까? 먼저 옵셔널로 처리한다면 import SwiftUI final class DoCatchTryThrowDataManager { let isActive: Bool = false func getTitle() -> String? { if isActive { return "New Text" } else { return nil } } .. 2023. 7. 5. DispatchQueue / GCD / multi threading / 스레드 / 비동기 코드를 짜다 보면 DispatchQueue를 되게 자주 만나고 사용한다. 그런데 이것이 무엇인지에 대한 개념과 이해가 부족했기 때문에 좀 정리하고 넘어가보고자 한다. 스레드(Thread) 스레드는 동시에 실행되는 작업의 단위이다. 각각의 스레드는 독립적으로 실행되고, '코드의 흐름을 병렬로 실행'할 수 있다. -> 만약 스레드가 1개만 있다면 코드의 순서대로 하나씩 위에서 아래로 쫙 실행해야 하는데, 이걸 스레드에 쫙 나눠줘서 동시에 병렬적으로 실행할 수 있다는 것이다. 메인 스레드(Main Thread) iOS 앱은 기본적으로는 메인 스레드(Main Thread)라는 단일 스레드 환경에서 동작한다. 메인 스레드의 역할은 UI 업데이트, 사용자 입력 처리, 애니메이션, 레이아웃 계산 등이 있다. 즉 사용.. 2023. 5. 26. 이전 1 다음