actor를 학습하는데 이어 actor가 채택하고 있는 프로토콜인 Actor
가 존재하며, 이를 채택하는 Sendable
이 존재하고 있어 해당 프로토콜에 대한 이해도가 필요하여 학습하게 되었습니다. 글에서 언급한 actor와 Actor는 다른 개념 입니다.
data race
위험 없이 임의의 동시 컨텍스트에서 값을 공유할 수 있는 안전 유형’data race
로부터 안전하도록 보장
한다고 생각할 수 있습니다./*
구조체, 열거형에서 Sendable 채택 시 주의할점은 구조체, 열겨형 내에 Sendable 멤버와 연관된 값만 있어야한다.
구조체는 Sendable이 채택된 type들을 소유 중이며 (value-semantic types)
아래의 yoonds와 같이 Sendable채택 되지않은 Yoonds를 소유 시 에러가 발생한다.
*/
enum: SomeEnum Sendable { ... }
struct SomeStruct: Sendable {
let double: Double = 1.0
let int: Int = 0
let yoonds: Yoonds // Stored property 'yoonds' of 'Sendable'-conforming struct 'SomeStruct' has non-sendable type 'Yoonds'
}
class Yoonds { }
class Yoonds {
/*
참조타입이지만 저장 프로퍼티가 변경이 불가한것만 소유한 상태 (let만 소유)
애플에서는 클래스가 변경불가한 let만 소유하는건 거의 불가하다고 표현한다.
즉, 해당 케이스로 과연 사용하는 일이 있을까? 하는 생각이 든다.
*/
let someLet: Int = 0
var someVar: Int = 0 // Stored property 'someVar' of 'Sendable'-conforming class 'Yoonds' is mutable
}
// 위의 조건에 전부 맞는 class가 되려면 아래와같이 되야한다.
final class Yoonds: Sendable {
let someLet1: Int = 0
let someLet2: String = ""
}
// 작성 예정
/*
함수와 클로저는 참조타입이며, Sendable을 채택할 수 없는 형태이기에
함수
*/