본문 바로가기
WWDC

WWDC25: Swift 동시성 사용하기

by songmoro 2025. 11. 30.

링크

https://developer.apple.com/kr/videos/play/wwdc2025/268/

 

 

서론

앱은 모든 코드를 메인 스레드에서 실행.
Swift 동시성을 통해 앱은 여러 작업을 동시에 수행할 수 있음
동시성 모델은 actor, task 등

 

메인 액터

@MainActor을 사용해 메인 액터 지정.
코드가 메인 스레드에서만 실행됨을 보장, 메인 액터 데이터는 해당 스레드에서만 액세스 가능

  • 메인 스레드 코드 보호를 통해 공유 상태에서 자유로운 액세스를 보장함
  • Xcode 26.0 부터는 기본적으로 @MainActor 격리성을 사용
  • 앱 모듈과 UI 상호 작용에 초점을 맞춘 모듈에서 사용함

 

동시 함수

@concurrent 속성을 적용하면 Swift가 백그라운드에서 함수를 실행하도록 지시

 

비격리 코드

@concurrent 함수는 항상 해당 액터에서 벗어나 실행됨. nonisolated 키워드를 사용하면 반대로 해당 액터에 격리하지 않게 됨(= 비격리)

 

값 타입

동시성 작업을 처리할 때, 값 타입을 사용하면 얻을 수 있는 이점

  • 백그라운드 스레드에 복사되면, 독립 복사본이 생성되어 메인 스레드 변경 내용이 백그라운드 스레드에 영향을 미치지 않음 -> 스레드 간 값 유형 안전하게 공유 가능
  • Sendable 준수 값 타입은 언제나 안전하게 동시 공유 가능
  • 메인 액터 타입은 암묵적으로 Sendable

 

클래스

여러 스레드가 동시에 Sendable이 아는 동일한 객체에 접근하여 수정하면 데이터 레이스 발생

  • Swift 동시성 시스템은 Sendable 타입만 액터 및 작업 사이에서 공유하도록하여 컴파일 타임에 이를 방지
  • 데이터 레이스 피하기 위해선 mutable한 객체가 동시에 공유되지 않도록 해야함
  • 객체를 다른 작업이나 액터에 보내기 전에 수정을 완료해야 함