actor를 학습하는데 이어 actor가 채택하고 있는 프로토콜인 Actor가 존재하며, 이를 채택하는 Sendable이 존재하고 있어 해당 프로토콜에 대한 이해도가 필요하여 학습하게 되었습니다. 글에서 언급한 actor와 Actor는 다른 개념 입니다.

Sendable

Sendable 사용가능 조건

/*
구조체, 열거형에서 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을 채택할 수 없는 형태이기에 
함수
*/

Class의 Sendable이 채택되기위한 조건