@unchecked Sendable

치킨치·2024년 5월 9일
0

어제 UIDocumentViewController 샘플을 직접 만들어 보았다.
WWDC23에서 제공된 정보가 불충분하긴 한 탓에 undo/redo 기능을 완벽히 구현하지 못했는데, 궁금증이 생겨서 UIDocument.ChangeKind 정의를 따라가보았다.

@MainActor open class UIDocument : NSObject, NSFilePresenter, ProgressReporting {
...
}

extension UIDocument {
...
    public enum ChangeKind : Int, @unchecked Sendable {
        case done = 0
        case undone = 1
        case redone = 2
        case cleared = 3
    }
...
}

@unchecked Sendable 프로토콜을 채택하고 있다.
Sendable 프로토콜을 정확히 준수하지 않았을 때 컴파일러에서 warning 메세지에 포함됐던 경험이 있다. 당시에는 'Sendable을 잘못사용하고 있구나' 정도로만 이해하고 넘어갔었는데 이번에야 말로 정확한 의미를 찾아보게 됐다.

@unchecked 는 컴파일러가 안정성 검증을 생략하게 한다. 주로 성능 최적화, 코드 호환성, 내부 동작을 제어할 필요가 있을 때, 개발자가 명시적으로 타입의 스레드 안정성을 관리하겠다는 의도를 표현한다. 즉 정합성을 체크하지 않는 옵션인 것이다.
현재는 Sendable외에 다른 프로토콜에 사용되는 케이스는 발견되지 않아서, @unchecked Sendable 처럼 숙어처럼 사용되고 있다.

profile
풀스텍이었던 iOS개발자

0개의 댓글