비동기 코드 작성과 관련된 복잡성을 해결하기 위해 설계되었음
async는 비동기 함수임을 나타내며 await는 비동기 함수의 결과를 기다리는 역할을 합니다
func fetchData() async -> String {
// 비동기 작업을 수행
return "데이터"
}
async func loadData() {
let result = await fetchData()
print(result)
}
Task는 비동기 작업을 병렬로 실행하기 위한 구조체입니다. 비동기 작업을 큐에 추가하고 작업이 완료되면 결과를 처리할 수 있습니다.
Task{
let data = await fetchData()
print(data)
}
actor는 데이터의 동시 접근을 제어하는 객체입니다. 여러 스레드에서 동시에 접근할 수 있는 데이터를 안전하게 처리하도록 도와줍니다. actor는 기본적으로 내부 상태에 대해 동기화된 접근을 제공합니다.
actor DataManager {
private var data: String = "초기 데이터"
func updateData(newData: String) {
data = newData
}
func fetchData() -> String {
return data
}
}
@MainActor는 특정 코드가 메인 스레드에서 실행되도록 보장하는 속성입니다. UI 업데이트와 같은 메인 스레드에서 실행해야 하는 작업에 유용합니다.
@MainActor
func updateUI() {
// UI 업데이트 코드
}
Swift Concurrency는 멀티스레딩과 비동기 처리를 더욱 안전하고 효율적으로 관리할 수 있도록 도와줍니다