[TIL] async/await

Eden·2025년 7월 17일

async/await는 Swift에서 비동기 코드를 더 직관적이고 읽기 쉽게 작성하기 위해 도입된 기능입니다.
기존의 콜백 기반 코드보다 간결하며, 비동기 작업을 동기 코드처럼 작성할 수 있게 합니다.


1. async/await란?

  • Swift 5.5에서 도입된 비동기 프로그래밍 기능
  • 비동기 작업을 처리하면서도 코드 흐름을 동기 방식처럼 표현 가능
  • async → 함수가 비동기 작업을 수행한다는 표시
  • await → 비동기 작업의 결과를 기다림

2. 기존 콜백 방식과의 비교

콜백 기반 코드

fetchData { result in
    switch result {
    case .success(let data):
        print(data)
    case .failure(let error):
        print(error)
    }
}

async/await 방식

let data = try await fetchData()
print(data)

3. async 함수 정의

func fetchData() async throws -> String {
    return "Hello"
}
  • async 키워드로 비동기 함수 정의
  • throws와 함께 사용 가능 (비동기 + 에러 처리)

4. async/await 사용 예시

Task {
    do {
        let message = try await fetchData()
        print(message)
    } catch {
        print("Error: \(error)")
    }
}
  • 비동기 함수는 반드시 Task 또는 다른 비동기 컨텍스트에서 호출해야 함

5. 여러 비동기 작업 동시에 실행

async let data1 = fetchData()
async let data2 = fetchData()

let results = await [data1, data2]
  • async let을 사용하면 동시 실행 가능
  • await로 결과를 받을 때까지 대기

6. 장점

  • 가독성 향상 (동기 코드처럼 작성 가능)
  • 콜백 지옥(Callback Hell) 문제 해결
  • 에러 처리 간단 (try와 함께 사용 가능)

7. 주의사항

  • async 함수는 반드시 비동기 컨텍스트에서 호출
  • UI 업데이트는 메인 스레드에서 처리 (@MainActor 활용 가능)

결론

async/await는 Swift 비동기 프로그래밍을 더 간결하고 직관적으로 만들어줍니다.
네트워크 통신, 파일 처리 등 시간이 오래 걸리는 작업에서 적극적으로 활용됩니다.

profile
iOS Dev

0개의 댓글