2023년 1월 1일
08:00 AM
Buffering ...

최근 글 👑

Swift Concurrency - Task와 TaskGroup

2025. 8. 19. 09:18ㆍSwift
반응형

안녕하세요!

애플 디벨로퍼 아카데미 @POSTECH 4기로 활동중인 Ethan입니다.

 

요즘 Swift Concurrency를 공부하면서, Day3 주제로 Task와 TaskGroup에 대해 알아보았습니다.

지난 글에서는 async/await와 GCD를 비교하면서 기본적인 비동기 개념을 다뤘는데요, 오늘은 실제로 동시성 작업을 어떻게 실행하고 관리하는지를 알아보려고 합니다.

Task {
    let data = await fetchData()
    print(data)
}

Task란?

 

Task는 비동기 작업의 실행 단위입니다.

말 그대로, 우리가 async 함수나 비동기 로직을 실행할 때 Task 블록을 만들어서 그 안에서 실행하게 됩니다.

 

여기서 Task { }는 새로운 비동기 작업을 실행하는 컨테이너 역할을 합니다.

Task는 실행되는 환경에 따라 priority(우선순위)와 취소 가능성(cancellation)을 고려해서 동작합니다.

 

즉, Task는 “하나의 독립적인 비동기 실행 흐름” 이라고 이해하면 됩니다.

 


 

Task의 특징

  • 독립 실행: Task는 독립적으로 실행되며, 기존 코드 흐름과는 분리됩니다.
  • 우선순위 지정 가능: .high, .medium, .low 와 같은 priority를 부여할 수 있습니다.
  • 취소 가능: Task.isCancelled 상태를 확인하거나 try Task.checkCancellation()을 통해 중간에 안전하게 종료할 수 있습니다.

TaskGroup이란?

 

그렇다면 여러 개의 비동기 작업을 동시에 실행해야 할 땐 어떻게 할까요?

이때 등장하는 것이 바로 TaskGroup입니다.

 

TaskGroup은 말 그대로 여러 개의 Task를 묶어서 동시에 실행할 수 있게 도와주는 도구입니다.

예를 들어, 여러 개의 네트워크 요청을 병렬적으로 처리할 때 유용합니다.

 

await withTaskGroup(of: Int.self) { group in
    for i in 1...5 {
        group.addTask {
            return await heavyWork(id: i)
        }
    }

    for await result in group {
        print("결과: \(result)")
    }
}

위 예시에서는 heavyWork라는 작업을 동시에 실행하고, 그 결과를 하나씩 받아옵니다.

즉, TaskGroup을 사용하면 작업을 병렬로 실행하고, 그 결과를 순차적으로 모아 처리할 수 있습니다.

 


구분TaskTaskGroup

실행 단위 단일 비동기 작업 여러 비동기 작업의 묶음
목적 독립적 실행 병렬 실행 & 결과 수집
사용 예시 단일 네트워크 요청 여러 개의 네트워크 요청 동시 처리
특징 우선순위, 취소 지원 동시성 제어, 결과 모음

 

오늘은 Swift Concurrency의 Task와 TaskGroup에 대해 알아보았습니다.

 

  • Task는 하나의 독립적인 비동기 작업 단위
  • TaskGroup은 여러 작업을 병렬로 실행하고 결과를 모을 때 사용

 

결국, Task = 실행 단위 / TaskGroup = 작업의 묶음 으로 이해하면 쉽습니다.

 

동시성 프로그래밍은 어렵지만, Swift Concurrency의 등장으로 훨씬 직관적이고 안전하게 다룰 수 있다는 점이 정말 매력적이었습니다.

 

모두 즐거운 코딩 하세요!


참고 자료

 

반응형