Swift의 async/await 다시 한번 정리

sonny·2025년 2월 23일
0

TIL

목록 보기
136/140

1. async/await란?

Swift의 asyncawait은 비동기 프로그래밍을 간결하고 직관적으로 작성할 수 있도록 도와주는 기능이다. 기존의 콜백 방식이나 CompletionHandler를 사용한 비동기 코드보다 가독성이 뛰어나고, 동기 코드처럼 작성할 수 있는 장점이 있다.

2. async 키워드

async는 해당 함수가 비동기적으로 실행될 것임을 나타낸다. async 함수는 내부에서 await을 사용할 수 있으며, 비동기적으로 실행되지만 호출하는 측에서는 기다려야 한다.

func fetchData() async {
    // 비동기 작업 수행
}

3. await 키워드

await은 비동기 함수 내부에서 사용되어 특정 비동기 작업의 완료를 기다린다. await을 사용하면 해당 작업이 끝날 때까지 기다린 후, 결과 값을 반환받아 이후 로직을 실행할 수 있다.

func fetchData() async {
    let data = await someAsyncFunction()
    print(data)
}

위 코드에서 someAsyncFunction()은 비동기 함수이며, await 키워드를 사용해 결과가 반환될 때까지 기다린 후 data에 저장된다.

4. 동기 코드 vs 비동기 코드

비동기 코드의 장점은 작업이 완료될 때까지 기다리는 동안 다른 작업을 수행할 수 있어 프로그램의 성능을 최적화할 수 있다는 점이다. 아래 예제에서 동기와 비동기 코드의 차이를 비교할 수 있다.

동기 코드 (기다려야 함)

func loadData() {
    let result = fetchSyncData() // 데이터가 반환될 때까지 기다림
    print(result)
}

비동기 코드 (병렬 실행 가능)

func loadData() async {
    let result = await fetchAsyncData() // 데이터가 준비될 때까지 기다렸다가 실행
    print(result)
}

5. async/await을 활용한 네트워크 요청 예제

func fetchDataFromAPI() async throws -> String {
    let url = URL(string: "https://example.com")!
    let (data, _) = try await URLSession.shared.data(from: url)
    return String(data: data, encoding: .utf8) ?? "No data"
}

func loadData() async {
    do {
        let result = try await fetchDataFromAPI()
        print(result)
    } catch {
        print("Error: \(error)")
    }
}

위 코드에서 fetchDataFromAPI 함수는 URLSession.shared.data(from:)을 비동기적으로 호출하여 네트워크 요청을 수행한다. await을 사용하여 응답을 기다린 후 데이터를 처리한다.

6. async 함수 호출 방법

비동기 함수는 기본적으로 동기 코드에서 직접 호출할 수 없다. async 함수는 비동기 컨텍스트에서 실행해야 한다.

1) Task를 이용한 실행

Task {
    await loadData()
}

2) 기존 함수에서 비동기 함수 호출

비동기 함수를 호출하는 함수도 async로 선언해야 한다.

func startFetching() async {
    await loadData()
}

7. async/await을 사용할 때 주의할 점

  1. 비동기 함수는 반드시 async 함수 내부에서만 호출할 수 있다.
  2. 비동기 함수 실행을 기다리지 않으면 예상치 못한 동작이 발생할 수 있다.
  3. 네트워크 요청과 같은 작업은 try와 함께 사용하여 오류를 처리해야 한다.

8. 결론

Swift의 async/await은 기존의 콜백 기반 비동기 코드보다 훨씬 가독성이 좋고 직관적이다. 이를 활용하면 비동기 프로그래밍을 보다 간결하고 효과적으로 구현할 수 있다.

profile
iOS 좋아. swift 좋아.

0개의 댓글

관련 채용 정보