맛동산이

Swift) 프로토콜 Sendable이란 본문

앱/Swift

Swift) 프로토콜 Sendable이란

진ddang 2023. 7. 4. 13:35

actor는 swift에서 새로이 만든 타입이었다.

그렇다면 Actor는 무었일까?

Actor

Actor는 actor타입이 채택하고 있는 프로토콜이다.

Actor프로토콜은 AnyActor과 Sendable을 상속하고 있다.

따라서 Actor은 Sendable을 강제적으로 채택하게 하는 프로토콜이라는것

Sendable

Sendable이란, 주어진 값이 concurrency 환경에서 안전하게 데이터가이동된다는 뜻,

이전에 말했던, Actor-isolation처럼 data race가 일어나지 않으려면 데이터가 변경되지 않거나, 공유되지 않는 경우 data race는 발생하지 않는다.

이를 보장하는 프로토콜이다.

Sendable채택

Sendable을 채택하려면, 주어진 타입의 값이 concurrent code에서 안전하게 사용될 수 있음을 나타내면 된다.

즉 value type내의 모든 stored property가 immutable하면 된다.

구조체에서 stored property

구조체에서 프로퍼티가 기본적인 타입이라면, sendable하다.

하지만 만약 다른 custom type이 들어오고 해당 타입이 sendable하지 않다면 에러

struct TestHuman: Sendable {
	let name: String
	var age: Int
}
// struct는 value타입이기 때문에 가능

struct TestHuman: Sendable {
	let name: String
	var age: Int
	let friend: Human // 만약 sendable을 채택하는 타입이 아니라면 에러
}

클래스에서 sendable

클래스에서 sendable을 채택하려면 다음의 조건을 만족해야함

  • final키워드를 표시
  • 모든 프로퍼티가 immutable해야함.
final class TestHuman: Sendable {
	let name: String
	let age: Int
	init()
} // stored property가 다 immutable하기때문에 가능

class TestHuman: Sendable {
	let name: String
	let age: Int
	init()
} // final키워드가 없어서 에러

 final class TestHuman: Sendable {
	let name: String
	var age: Int
	init()
} // age가 mutable state라서 에러

Uploaded by N2T

반응형