정적 격리(Static) vs 동적 격리(Dynamic) 대조 시뮬레이터

레거시 알림(Notification) UI 업데이트 함수를 두 가지 방식으로 보호할 때 발생하는 컴파일러와 런타임의 동작 차이
정적 격리 (Static Isolation)

컴파일 타임 안전 규칙 강제

`@MainActor` 속성을 보고 컴파일러가 위반 코드를 빌드 시점에 적발한다.

Xcode 빌드 검증 전
> 분석 준비 완료.
🛡️ 정적 격리 강제 안전성 확인:
컴파일러가 동기 호출 라인을 에러로 정확히 차단했습니다. 가이드에 따라 개발자가 동기 클로저 내부를 비동기 컨텍스트인 'Task { @MainActor in ... }' 구문으로 안전하게 래핑 및 격리하여 빌드를 성공시켰습니다.
동적 격리 (Dynamic Isolation)

런타임 개발자 명시적 보증

`assumeIsolated`로 컴파일 검사를 생략시킨다. 검증 실패 시 앱은 즉사한다.

@MainActor func updateProfileUI() { ... } // 백그라운드 알림 수신 스케줄러 영역 NotificationCenter.default.addObserver(self) { _ in MainActor.assumeIsolated { self.updateProfileUI() // 무검사 통과 라인 } }
가상 유저 기기 대기 중
> 레거시 우회 코드 분석 대기 중.
💥 동적 격리 오류, 유저 기기 폭발!
컴파일러는 개발자의 보증을 믿고 통과시켰으나, 알림 노티가 백그라운드 스레드에서 터지자 `assumeIsolated` 계약이 즉시 파기되며 앱 프로세스가 런타임에 강제 종료되었습니다.