Task와 @MainActor: Swift의 비동기 실행 방식

Swift에서는 비동기 코드를 실행할 때 Task를 사용하며, UI 업데이트가 필요한 경우 @MainActor를 함께 사용합니다.

Task를 사용한 비동기 실행

Task {
    let data = try await fetchData()
    print("데이터: \(data)")
}

Task는 새로운 비동기 컨텍스트를 생성하는 역할을 합니다.

@MainActor: UI 업데이트 시 사용

Task { @MainActor in
    imageData = try JSONDecoder().decode(PandaCollection.self, from: data)
}

SwiftUI에서는 UI 업데이트를 메인 스레드에서 실행해야 하기 때문에 @MainActor가 필요합니다.

Kotlin의 유사한 코드

lifecycleScope.launch {
    withContext(Dispatchers.Main) {
        imageData = json.decodeFromString<PandaCollection>(data)
    }
}

Swift의 @MainActor는 Kotlin의 Dispatchers.Main과 유사한 역할을 합니다.

Task와 @MainActor 함께 사용하기

Task { @MainActor in
    let data = try await fetchData()
    updateUI(with: data)
}

이렇게 하면 비동기 작업을 실행하면서도 UI 업데이트를 안전하게 수행할 수 있습니다.

위로 스크롤