70강 - 글로벌 액터로 격리된 Protocol 을 extension 에서 conform 시 타입 본체의 격리 수준 질문
강의에서는 5:16 쯤 "프로토콜 자체가 글로벌 격리로 구현된 프로토콜의 경우, 동일한 소스파일(.swift) 인 경우 확장에 프로토콜을 채택하더라도 타입 전체가 글로벌 격리로 추론됨" 이라고 설명합니다.
하지만 동일한 파일에서 아래와 같이, extension 에 protocol 을 채택해도 타입 본체는 nonisolated context 인것을 확인할 수 있었습니다.
@MainActor
protocol GloballyIsolated {
func updateUI(vc: UIViewController)
}
struct S {
func updateUI2(vc: UIViewController) {
// nonisolated context
vc.view.backgroundColor = .red // 💥💥💥 Main actor-isolated property 'backgroundColor' can not be mutated from a nonisolated context
}
}
extension S: GloballyIsolated {
func updateUI(vc: UIViewController) {
// MainActor context
vc.view.backgroundColor = .red
}
}설명하시는 시점과, 현재 시점의 동작이 달라진건가? 생각도 했었는데, 강의 6:58 쯤에서는 "GlobalProtocol 을 확장해서 채택한다하더라도 본체 자체는 비격리 된다" 라고 설명합니다.
즉, 동일한 코드에 대해 설명이 다른듯 하여 조금 헷갈리는 부분이 있어서요!
현재 시점에는 "프로토콜 자체가 글로벌 격리로 구현된 프로토콜의 경우, 동일한 소스파일(.swift) 인 경우 확장에 프로토콜을 채택하더라도 타입 전체가 글로벌 격리로 추론되지 않음" 으로 동작하는것 같은데 이 부분에 대한 강의 자료가 잘못된건지, 아니면 제가 놓친 부분이 있는지 궁금합니다.
감사합니다.
Answer 1
1
아 네. sujinnaljin 님.
자료에 오류가 있었네요ㅠㅠ
(제가 다시 에볼루션 문서를 확인해보니, 제가 해석을 잘못했었네요ㅠ)
https://github.com/swiftlang/swift-evolution/blob/main/proposals/0316-global-actors.md
여기 들어가 보시면, 아래 부분이 있는데, 이 부분의 해석을 제가 해석을 잘못했었던 것 같네요.
A non-actor type that conforms to a global-actor-qualified protocol within the same source file as its primary definition infers actor isolation from that protocol:
그러니까, 같은 파일 안에서도 conformance 선언 위치가 본체(primary definition) 안에 있어야 한다는 뜻이네요.
그렇다면 결국 정리하자면, 본체에 정의되어야 한다는 건(어차피 같은 파일 안에 있어야 한다는 것과 동일한 말이니) 공식 문서에 같은 파일 안에 있어야 한다는 것(within the same source file)이 크게 의미가 있는 것은 아니고 결국 본체에 채택할 경우, 격리된다는 의미겠네요.
정리하자면, "프로토콜 자체가 글로벌 격리로 구현된 프로토콜의 경우, 동일한 소스파일(.swift)이라고 하더라도 확장에 프로토콜을 채택하면, 타입 전체가 글로벌 격리로 추론되지는 않음"라고 볼 수 있겠네요.
이 부분은 교재를 수정 및 수정이 필요한 부분을 추후 강의에 넣어놓도록 하겠습니다.
제가 교재를 만들고, 강의를 찍을 당시 수십개의 에볼루션 문서 중에 중요한 내용을 다시정리해서 제 나름대로의 목차를 뽑아서 만들다 보니 사소한 오류들이 조금 있네요. 넓은 아량으로 이해를 부탁드립니다.
감사합니다. :)
수강 기간 연장 문의
0
22
1
수강연장부탁드려도될까요..
0
37
2
Combine Playground 에서 실행 시
0
52
2
레디선 테스트코드에서 채널이름은 없어도 되는건가요?
0
37
2
searchable이 화면 하단에 위치해요
0
60
2
모니터와 synchronized, ReentrantLock, 원자적연산 CAS관련해서 추가적으로 더 깊게 공부했는데 제가 이해한 것이 맞나요??
0
81
1
mac python 3.10 - permission denied
0
51
1
Future cancel기능을 사용했지만 interrupt가 발생하지 않을 때 어떻게 처리해야하나요?
0
70
2
Drawing Cycle 관련 질문
0
70
1
2.스레드 생성과 실행 - 17P 그림 문의
0
70
2
자바 동시성 현업에서 사용예시가 궁금합니다
0
128
1
20강 Task 내부에서 nonisolated async 호출 예제 질문드립니다
0
75
2
19강 Actor 의 동작 관련해 질문드립니다
0
81
2
Actor에서 Task vs Task.detached 사용 시 재진입 문제 질문
0
103
2
18강 NSCache 예시 질문
0
97
2
Task 클로저 내 `non-Sendable` 값 타입 접근 시, 캡처 리스트가 정의된 Task 순서에 따른 컴파일러 에러 차이
0
117
1
3강 스레드 제어권 관리 질문드립니다
0
72
1
10번 강의 관련하여 질문드립니다.
0
71
2
ImageProject 관련 문의
0
58
1
10강 내용 문의드립니다.
0
83
2
강의를 들으면서 생긴 질문이 있습니다.
0
135
3
협력적 쓰레드 풀에서 쓰레드 운영방식 질문 드립니다.
0
81
1
안녕하세요. 액터 홉핑 관련 질문드립니다.
0
155
1
재개될 때 스레드 변경시 왜 컨텍스트 스위칭이 발생하지 않는 건가요?
0
314
2

