@Sendable

2025. 5. 11. 18:47·iOS/Swift Concurrency
반응형

👋 들어가기 전

두번 째 attribute는 @Sendable이다. 

아무래도 배우는 attribute들의 순서가 고민이 많았는데

Conccurency의 가장 기본이 되는 Sendable attribute부터 살펴보자.

 

🏁 학습할 내용

  • Sendable 프로토콜
  • @Sendable

✈️ Sendable 프로토콜

 

📋 정의

 

 

 

안전하게 공유될 수 있다는 의미는 멀티스레딩 환경에서 안전하게 데이터 공유가 가능하다는 뜻

동시성 프로그래밍의 고질적인 문제를 해결할 수 있는 중요한 내용이다.

 

❓어떻게 채택할 수 있는데?

 

암묵적으로 채택될 수 있는 타입별 조건은 다음과 같다.

  • 값 타입
    • 모든 멤버가 Sendable일 때
    • @frozoen이면 안됨 ❌
    • public이면 안됨 ❌
  • 열거형
    • 모든 멤버 및 associatedValue까지 모두 Sendable일 때
    • @frozoen이면 안됨 ❌
    • public이면 안됨 ❌
  • 클래스 
    • final
    • 클래스의 모든 멤버는 let으로 선언
    • 클래스의 모든 멤버는 Sendable
    • NSObjec를 제외한 어떤 수퍼 클래스도 가질 수 없음
  • 엑터
  • 모두 Sendable을 채택한 요소로 구성된 튜플
  • 메타 타입 ex) Int.Type

 

⚠️ 주의할 점

actor가 아닌 참조타입 즉, 클래스는 위 형태처럼 특별한 상황이 아니면

대부분 Sendable이 아니므로 멀티스레드 환경에서 사용에 주의하자.


🛜 @Sendable

📋 정의

공식 문서 Sendable Functions and Closures 를 살펴보면 @Sendable 속성을

살펴보면 컴파일 시점에 클로저 내부 context를 Sendable한 환경임을 검사하는 느낌이다. 

 

즉, 클로저가 Sendable 하냐를 검사하는 느낌, 클로저가 Sendable하면
멀티 스레딩에서 공유가 안전하다는 의미를 나타낸다.

 

✨ 역할

🤝 프로토콜 채택을 대신한다.

Sendable 프로토콜을 채택하는 대신 @Sendable 속성으로 클로저 또는 함수가

Sendable 하다는 것을 검사한다.

 

⚠️ 주의할 점

여기서 주의할점은 클로저 / 함수는 참조타입이라는 점이다.

 

그러므로 @Sendable 속성을 사용하고 싶다면 다음과 같은 제약조건을 지켰을 경우에만 사용할 수 있다.

 

  • 클로저나 함수가 캡쳐한 모든 값은 Sendable을 만족해야한다.
  • 클로저는 오직 값으로만 캡쳐만 가능하다.
  • Sendable 클로저를 기대하는 상황에서, 해당 조건을 만족하는 클로저는 자동으로 Sendable로 간주된다.
    • 대표적으로 Task.detached 클로저가 있다.

 

⌨️ 사용 예시

1. 클로저 / 함수 에 Sendable 기대

Task.detached { @Sendable in
  // 
}

@Sendable func sendableFunction() async throws {
  
}

2.  타입 명시

let sendableClouser: @Sendable () -> Void = {
  print("Hello")
}

sendableClouser()


func wraaperFun(_ handler: @Sendable () -> Void) {
  handler()
}

wraaperFun {
  print("Sendable wrapperFun")
}

😀 소감 및 마무리

흠 여기서 의문이 런타임에서도 100% Sendable을 보장할까?? 

라는 의문점이 있다.

 

의문점이 해결되면 코멘트를 남겨놓겠다.


출처

https://developer.apple.com/documentation/swift/sendable

 

Sendable | Apple Developer Documentation

A thread-safe type whose values can be shared across arbitrary concurrent contexts without introducing a risk of data races.

developer.apple.com

 

https://medium.com/delightroom/swift-concurrency-2%ED%83%84-sendable-05c7a33a003b

 

Swift Concurrency 2탄: Sendable

Sendable을 활용한 안전한 데이터 공유

medium.com

 

반응형

'iOS > Swift Concurrency' 카테고리의 다른 글

@preconcurrency  (0) 2025.05.12
@unchecked Sendable  (0) 2025.05.12
@MainActor  (0) 2025.05.08
Actor  (0) 2025.05.08
컨커런시 문법 정리  (0) 2025.03.22
'iOS/Swift Concurrency' 카테고리의 다른 글
  • @preconcurrency
  • @unchecked Sendable
  • @MainActor
  • Actor
Hamp
Hamp
남들에게 보여주기 부끄러운 잡다한 글을 적어 나가는 자칭 기술 블로그입니다.
  • Hamp
    Hamp의 분리수거함
    Hamp
  • 전체
    오늘
    어제
    • 분류 전체보기 (337) N
      • CS (30)
        • 객체지향 (2)
        • Network (7)
        • OS (6)
        • 자료구조 (1)
        • LiveStreaming (3)
        • 이미지 (1)
        • 잡다한 질문 정리 (0)
        • Hardware (2)
        • 이론 (6)
        • 컴퓨터 그래픽스 (0)
      • Firebase (3)
      • Programing Langauge (41)
        • swift (34)
        • python (6)
        • Kotlin (1)
      • iOS (134)
        • UIKit (37)
        • Combine (1)
        • SwiftUI (34)
        • Framework (7)
        • Swift Concurrency (22)
        • Tuist (6)
        • Setting (11)
        • Modularization (1)
        • Instruments (6)
      • PS (59)
        • 프로그래머스 (24)
        • 백준 (13)
        • LeetCode (19)
        • 알고리즘 (3)
      • Git (18)
        • 명령어 (4)
        • 이론 (2)
        • hooks (1)
        • config (2)
        • action (7)
      • Shell Script (2)
      • Linux (6)
        • 명령어 (5)
      • Spring (21)
        • 어노테이션 (6)
        • 튜토리얼 (14)
      • CI-CD (4)
      • Android (0)
        • Jetpack Compose (0)
      • AI (19) N
        • 이론 (10)
        • MCP (1)
        • LangGraph (8) N
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    concurrency
    IOS
    boostcamp
    백준
    dispatch
    Spring
    투포인터
    SwiftUI
    GIT
    dp
    프로그래머스
    dfs
    Swift
    protocol
    lifecycle
    UIKit
    property
    Tuist
    CS
    AVFoundation
  • 최근 댓글

  • 최근 글

  • 반응형
  • hELLO· Designed By정상우.v4.10.0
Hamp
@Sendable
상단으로

티스토리툴바