WWDC 2025: Swift Concurrency의 진화적 접근 전략
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
개발 툴
대상자
- iOS/앱 개발자, Swift 초보자 및 중급자
- 난이도: 중급(Concurrency 개념 이해 필수)
핵심 요약
- 단순한 싱글스레드 코드부터 시작 후 성능 요구에 따라 Concurrency 도입
- @MainActor 애너테이션으로 UI 스레드 안전성 확보, Xcode 16 이상 기본 활성화
- Actor 기반 아키텍처로 데이터 분리,
Sendable
프로토콜을 통한 메모리 안전성 강화 - async/await 문법으로 네트워크 요청 비동기 처리, UI 블로킹 방지
섹션별 세부 요약
1. 단순한 싱글스레드 접근
- UI 처리 및 단순 데이터 작업은 싱글스레드로 충분
- 네트워크 요청/파일 I/O 없이 간단한 앱에 적합
- 코드 복잡성 최소화, 유지보수성 향상
2. Main Actor 보호 메커니즘
@MainActor
애너테이션으로 UI 스레드에 모든 UI 관련 코드 강제- Xcode 16 이상 프로젝트에서 기본 활성화
- 스레드 안전성 보장, 데이터 레이스 예방
3. async/await 기반 비동기 처리
async/await
문법으로 네트워크 요청 비동기 처리URLSession.shared.data(from:)
함수 사용 예시- UI 블로킹 방지, 라이브러리 API 자동 백그라운드 처리
4. CPU 집약적 작업 이동 전략
@concurrent
애트리뷰트로 백그라운드 스레드 실행Sendable
타입으로 데이터 안전성 확보- 메인 액터 의존성 확인 후 함수에
@concurrent
적용
5. Actor 기반 데이터 관리
- 주요 도메인(네트워킹, 데이터 처리)별 Actor 생성
- UI 관련 클래스는 메인 액터 유지, 모델 클래스는 Actor로 전환 금지
actor NetworkManager
예시: 스레드 안전한openConnections
관리
6. 데이터 안전 규칙
- 값 타입(Struct/Enum)은 자동
Sendable
- 참조 타입은 스레드 간 공유 시 주의 필요
- 메인 액터로 전달 전 객체 수정 완료 필수
- Swift 컴파일러가 데이터 레이스 감지
결론
- "Approachable Concurrency" 설정 활성화 및 Instruments 도구로 스레드 경쟁 분석
- 성능 병목 지점은 프로파일링 도구로 확인 후 비동기 처리 최적화
- 모든 객체 수정 완료 후 actor 전환, Sendable 프로토콜 준수 필수
- 과도한 Concurrency 도입은 복잡성 증가 → 성능 요구 시 점진적 도입 권장