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 도입은 복잡성 증가 → 성능 요구 시 점진적 도입 권장