IMCAT.DEV
로그인 가입
Swift 중급 비동기

Swift 비동기 프로그래밍(Async) 개념

Swift 비동기 프로그래밍(Async) 개념 — 중급

비동기 프로그래밍(Async) 개념

1. 도입 (왜 배워야 하는가)

비동기 프로그래밍은 현대 소프트웨어 개발에서 매우 중요한 역할을 합니다. 특히, 사용자 인터페이스(UI)가 있는 애플리케이션에서 비동기 처리를 잘 활용하지 않으면, 사용자가 앱을 사용하는 경험이 나빠질 수 있습니다. 예를 들어, 네트워크 요청을 동기적으로 처리하면, 요청이 완료될 때까지 앱이 멈춰버리게 되어 사용자에게 불편함을 주게 됩니다. 비동기 프로그래밍을 통해 이러한 문제를 해결할 수 있습니다.

비동기 프로그래밍을 모르면, 네트워크 요청, 데이터베이스 쿼리 등 시간이 걸리는 작업을 수행하는 동안 앱이 멈추거나, 사용자 경험이 저하되는 문제를 겪게 됩니다.

2. 핵심 개념 설명

비동기 프로그래밍의 핵심 개념은 '작업을 동시에 진행할 수 있도록 하는 것'입니다. 이를 통해 앱의 응답성을 높이고, 사용자 경험을 개선할 수 있습니다.

비유

비동기 프로그래밍을 요리하는 것에 비유할 수 있습니다. 요리를 할 때, 끓이고 있는 국물이 있을 때 다른 재료를 준비할 수 있습니다. 이처럼 비동기 프로그래밍에서는 한 작업이 진행되는 동안 다른 작업을 동시에 처리할 수 있습니다.

관련 용어 정리

용어설명
비동기(Async)요청 후 결과를 기다리지 않고 다음 작업을 진행하는 방식
콜백(Callback)비동기 작업이 완료된 후 호출되는 함수
프로미스(Promise)비동기 작업의 결과를 나타내는 객체

3. 기본 코드 예제

가장 기본적인 비동기 처리 방법인 DispatchQueue를 사용한 예제를 살펴보겠습니다.

import Foundation

print("작업 시작")
DispatchQueue.global().async {
    sleep(2) // 2초 동안 대기 (비동기 작업)
    print("비동기 작업 완료")
}
print("작업 종료")

실행 결과

작업 시작
작업 종료
비동기 작업 완료

코드 한 줄씩 동작 설명

  1. print("작업 시작") - 작업이 시작되었음을 출력합니다.
  2. DispatchQueue.global().async { ... } - 비동기 작업을 글로벌 큐에서 시작합니다.
  3. sleep(2) - 2초 동안 대기합니다. 이 작업은 비동기적으로 실행됩니다.
  4. print("비동기 작업 완료") - 비동기 작업이 완료되었음을 출력합니다.
  5. print("작업 종료") - 메인 스레드에서 작업이 종료되었음을 출력합니다.
  6. 4. 실전 활용 예제

    예제 1: 네트워크 요청

    쇼핑몰 앱에서 상품 정보를 서버에서 가져올 때 비동기 처리를 사용합니다.

    func fetchProductData() {
        print("서버에 상품 요청 중...")
        DispatchQueue.global().async {
            // 네트워크 요청 시뮬레이션
            sleep(3) // 3초 대기
            let productData = "상품 정보"
            DispatchQueue.main.async {
                print("상품 데이터 수신: \(productData)")
            }
        }
    }
    fetchProductData()

    예제 2: 데이터베이스 쿼리

    사용자의 장바구니 정보를 데이터베이스에서 비동기적으로 가져올 때 사용할 수 있습니다.

    func fetchCartItems() {
        print("장바구니 아이템 요청 중...")
        DispatchQueue.global().async {
            // 데이터베이스 쿼리 시뮬레이션
            sleep(2) // 2초 대기
            let cartItems = ["사과", "바나나"]
            DispatchQueue.main.async {
                print("장바구니 아이템 수신: \(cartItems)")
            }
        }
    }
    fetchCartItems()

    5. 흔한 실수와 주의사항

    실수 1: 메인 스레드에서 비동기 작업 실행

    // 잘못된 예
    DispatchQueue.main.async {
        sleep(2) // 메인 스레드에서 대기
        print("작업 완료")
    }
    • 문제: 메인 스레드가 멈추어 UI가 응답하지 않게 된다.
    • 실수 2: 비동기 작업 결과를 메인 스레드에서 처리하지 않음

      DispatchQueue.global().async {
          let result = "데이터"
          // 메인 스레드에서 UI 업데이트를 해야 함
          print("결과: \(result)") // 잘못된 위치
      }
    • 문제: UI 업데이트가 메인 스레드에서 이루어지지 않아 크래시가 발생할 수 있다.
    • 6. 정리

    • 비동기 프로그래밍은 사용자 경험을 향상시키는 중요한 기술이다.
    • 네트워크 요청이나 데이터베이스 작업을 비동기적으로 처리해야 한다.
    • 메인 스레드와 비동기 작업을 잘 구분하여 사용해야 한다.

다음에 학습하면 좋은 주제: Swift의 Combine 프레임워크로 비동기 작업을 더욱 간편하게 처리하는 방법.