📱 iOS/Swift Concurrency

[Swift Concurrency 9편] Sendable 프로토콜

kyxxn 2025. 2. 26. 10:54

Sendable 프로토콜

비동기 컨텍스트에서 동작할 수 있도록 보장해주는 프로토콜

값 타입의 경우 자동으로 채택

레퍼런스인 클래스의 경우 채택해야 비동기 컨텍스트에서 데이터 경쟁 없이 동작하는 걸 컴파일러로부터 보장 받을 수 있음

클래스가 Sendable을 채택하려면?

아래 3가지를 따라야 함

  • final 로 선언되어야 함
  • 프로퍼티가 모두 Sendable을 채택해야 함
  • 프로퍼티가 모두 let이어야 함 (불변이어야 한다는 뜻)

actor는 Sendable을 채택하고 있음

protocol Actor : AnyObject, [Sendable](<https://developer.apple.com/documentation/swift/sendable>)

Sendable을 채택할 수 있는 것들

  • 값 타입
  • mutable storage 가 없는 참조 타입
  • 내부적으로 상태에 대한 액세스를 관리하는 참조 타입
  • @Sendable로 표시된 함수 및 클로저