whiteboardObject와 timestamp를 갖고 있는 register를 Actor로 구현을 해서, 기존에 고민하던 whiteboardobject에 대한 동시성 문제를 해결하려고 했습니다.
하지만 Actor를 Hashable하게 사용하려고 할 때 문제가 발생했습니다.
내부에 갖고 있는 whiteboardObject를 비교하여 Hashable을 구현하려 했습니다.
그래서 기존에 작성하던 코드처럼 작성을 해보았습니다.
actor Register {
var whiteboardObject: WhiteboardObject
var timestamp: Timestamp
init(whiteboardObject: WhiteboardObject, timestamp: Timestamp) {
self.whiteboardObject = whiteboardObject
self.timestamp = timestamp
}
}
extension Register: Hashable {
static func == (lhs: Register, rhs: Register) -> Bool {
lhs.whiteboardObject == rhs.whiteboardObject
}
public func hash(into hasher: inout Hasher) {
hasher.combine(whiteboardObject)
}
}

위와 같은 오류 메시지를 발견할 수 있습니다.
이 오류는 Actor 격리(actor isolation) 규칙을 위반했음을 나타냅니다.
<aside> 💬
Swift의 actor는 **데이터 경쟁(data race)**을 방지하고 안전한 동시성(concurrency)을 보장하기 위해 설계되었습니다.
Actor 내부의 속성(예: whiteboardObject)은 기본적으로 actor-isolated 상태에 있으며, 동일한 actor의 동기(synchronous) 메서드에서만 직접 접근할 수 있습니다.
nonisolated context는 다음을 포함합니다:
actor 외부에서 접근하려는 경우.nonisolated 메서드나 속성에서 접근하려는 경우.위와 같은 경우는 여러가지 문제점이 있습니다.
whiteboardObject는 actor내부에서만 접근 할 수 있지만
여러 문제들을 해결 해 봅시다.
let)을 사용하여 동시성 안전성 문제 해결하기.