새소식

iOS/Swift

[Swift] Task, await, async

  • -

 

Introduction


Task, await, async은 Swift5.5에서 비동기 프로그래밍을 위해 도입되었다.

 

세 가지를 알아보기 전에 간단하게 비동기에 관하여 정리하고 들어가려고 한다.

 

- 비동기(Asynchronus : 동시에 일어나지 않음)

  • 동시에 일어나지 않는다를 의미, 요청과 결과가 동시에 일어나지 않을 거라는 약속
    - 요청한 그 자리에서 결과가 주어지지 않음
    - 노드 사이의 작업 처리 단위를 동시에 맞추지 않아도 된다.

 

- 동기(Synchronous: 동시에 일어나는)

  •  동시에 일어난다를 의미, 요청과 그 결과가 동시에 일어난다는 약속, 바로 요청을 하면 시간이 얼마가 걸리던지
    요청한 자리에서 결과가 주어져야함
    - 요청과 결과가 한 자리에서 동시에 일어남
    - A노드와 B노드 사이의 작업 처리 단위(transaction)를 동시에 맞추겠다.

 

Swift로 비동기 방식으로 작업을 처리할 때 사용하는 것이 Task이다.

 

Task


- 단어 뜻 그대로 일이다. 

 

- 비동기 작업 단위

 

- Swift5.5 이전에는 Dispatch를 사용

 

- Task가 실행되는 동안 작업의 상태를 추적하고, 결과를 반환할 수 있음

 

 

 

async / await


- async : 함수나 메서드의 선언 앞에 붙여서 해당 함수가 비동기적으로 동작함을 나타냄

 

- await : 비동기 작업이 완료될 때까지 현재의 실행 흐름을 일시적으로 정지시키고, 결과를 기다리는 역할

 

 


 

간단하게 비동기 함수를 사용하는 것들의 개념을 알아보았다.

 

근데 복잡하긴 한데 어떤 점이 좋을까?

 

 

장점


1. 동기(Synchronous)적인 코드와 유사한 구문으로 코드의 가독성을 향상함

 

2. 비동기 작업의 상태를 추적하고 관리하는 Task를 통해 작업의 진행상황을 더욱 세밀하게 제어 가능

 

3. 동시에 여러 개의 비동기 작업을 실행하고, 결과를 기다릴 수 있는 편리한 방법으로 성능 최적화 가능

 

 

Code Example


// Task, await 사용
@IBAction func btnSendDataClicked(_ sender: UIButton) {
  Task{
  	await self.writeData()
  }
}

// async의 선언

func deletData() async{
    do {
        try await Amplify.DataStore.delete(Univ.self, withId: "ID값")
        print("Post deleted!")
    } catch let error as DataStoreError {
        print("Error deleting post - \(error)")
    } catch {
        print("Unexpected error \(error)")
    }
}

 

 

 

출처 :
https://developer.apple.com/documentation/swift/task
https://private.tistory.com/24

 

 

728x90

'iOS > Swift' 카테고리의 다른 글

[Swift] Date / DateFormatter  (0) 2023.07.15
[Swift] UserDefault  (0) 2023.07.15
[Swift] NotificationCenter  (0) 2023.04.16
[Swift] Localizable  (0) 2023.03.18
[Swift] 제네릭  (0) 2023.03.15
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.