nyancoder

WWDC 2021 - Meet async/await in Swift 본문

WWDC/WWDC 2021

WWDC 2021 - Meet async/await in Swift

nyancoder 2021. 6. 30. 02:42

원본 영상: https://developer.apple.com/videos/play/wwdc2021/10132/

 

이 장에서는 Swift에서 새로 지원되는 async/await 구문의 활용에 대해서 알아봅니다.

 

기존 방식의 문제점

  • 예외가 발생하거나 실패 시에 completion 블록을 호출해 주는 것을 빼먹기가 쉽습니다.
  • completion 호출을 함수가 끝나는 모든 지점에 넣어야 해서 코드가 복잡해집니다.
  • Error?를 전달하는 대신 표준 라이브러리의 Result를 사용할 수 있지만 코드가 살짝 길어지고 약간 안정성이 더해질 뿐 근본적으로는 큰 차이가 없습니다.

 

Async / await

  • 함수에 async 키워드를 추가하여 비동기로 호출되는 함수임을 알릴 수 있습니다.
  • completion블록을 전달하지 않고 바로 리턴할 수 있어 코드가 훨씬 간결합니다.
  • 예외 발생 시에는 단순히 그 예외를 던지고 throws 키워드를 함수에 추가하기만 하면 돼서 간단합니다.
  • 내부의 다른 비동기 로직도 await 키워드만 추가해서 결과를 얻어올 수 있습니다.

 

Async properties

읽기만 하는 속성에는 async 키워드를 붙여 비동기로 결과를 리턴할 수 있습니다.

 

Async sequences

await 키워드를 for 루프에 사용하여 Async sequences의 결과를 받아올 수 있습니다.

 

Async sequences in depth

  • await 키워드가 있는 비동기 함수가 호출되면 현재 Task의 실행은 멈출 수도 있습니다.
  • 실행이 멈추면 system에서 필요한 작업을 수행 후 비동기 호출이 완료될 때 다시 현재의 Task가 진행됩니다.
  • await 키워드 이전의 스레드와 이후의 스레드가 다를 수 있습니다.

 

Adopting async/await

테스트 함수에도 async/await 키워드를 적용하여 비동기 호출을 테스트할 수 있습니다.

  • 기존의 비동기 함수 호출의 경우에도 async 키워드와 블록으로 감싼 후 await를 호출하면 async/await를 활용한 비동기 처리를 할 수 있습니다.
  • 예외처리가 필요한 경우 앞에 try를 붙여 예외를 처리할 수 있습니다.

 

Async APIs in SDK

  • 기존의 completion 블록을 받던 비동기 함수들은 새 api로 대체되어 async/await 구문을 사용할 수 있습니다.
  • getCurrentTimelineEntry와 같은 이름의 함수는 동기적으로 수행되지 않으므로 get이 제거된 currentTimelineEntry로 이름이 변경될 수 있습니다.

 

Async alternatives and continuations

  • 기존의 비동기 함수를 사용하는 코드를 async/await 형태로 감싸려고 할 때, withCheckedThrowingContinuation 함수를 사용할 수 있습니다.
  • 비동기 함수의 실행이 끝나면, 반드시 continuation의 resume함수를 호출하여 작업이 계속되도록 해야 합니다.
  • resume은 반드시 한 번만 호출되어야 합니다.
  • resume을 호출하지 않는 경우에는 Swift 컴파일러가 경고로 알려줍니다.

  • 필요한 경우 continuation을 멤버로 가지고 있다가 호출할 수 있습니다.

 

목차: https://nyancoder.tistory.com/2

Comments