링크
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한 객체가 동시에 공유되지 않도록 해야함
- 객체를 다른 작업이나 액터에 보내기 전에 수정을 완료해야 함
'WWDC' 카테고리의 다른 글
| WWDC19: Combine 소개 (1) | 2024.09.11 |
|---|---|
| WWDC24: Demystify explicitly built modules (1) | 2024.09.06 |
| WWDC24: Run, Break, and Inspect Explore effective debugging in LLDB (0) | 2024.07.22 |
| WWDC24: Swift에서 noncopyable 유형 소비하기 (1) | 2024.07.12 |
| WWDC24: SwiftUI 컨테이너 쉽게 이해하기 (0) | 2024.07.02 |