Swift 6의 Sendable을 작게 이해하기

Sendable이 무엇을 보장하고, 컴파일러 경고를 설계 신호로 활용하는 방법을 작은 예제로 정리합니다.

Sendable은 값을 동시성 경계 너머로 전달해도 안전하다는 약속이다. 단순히 경고를 없애기 위한 프로토콜로 보면 중요한 설계 신호를 놓치기 쉽다.

값 타입부터 확인하기

저장 프로퍼티가 모두 Sendable인 구조체는 보통 자연스럽게 조건을 만족한다.

struct Article: Sendable {
  let id: UUID
  let title: String
}

반대로 여러 작업이 같은 변경 가능한 참조를 공유한다면 보호 전략이 필요하다. 이때 @unchecked Sendable로 검사를 우회하기 전에 actor로 상태의 소유권을 분명히 할 수 있는지 먼저 확인한다.

컴파일러 오류는 귀찮은 장애물이 아니라, 값이 어느 실행 문맥에 속하는지 다시 묻는 설계 질문에 가깝다.

점검표

질문확인할 내용
값이 변경되는가?불변 값으로 바꿀 수 있는지
참조가 공유되는가?actor가 소유하도록 만들 수 있는지
수동 동기화가 있는가?안전성을 테스트와 문서로 설명할 수 있는지

이 기준을 적용하면 동시성 코드는 물론 일반적인 상태 설계도 더 명확해진다.

댓글과 반응