@MainActor는 해당 코드가 메인 스레드(UI 스레드) 에서 실행되어야 함을 보장 UI 업데이트나 UIKit 접근을 안전하게 처리할 때 유용
✅ 특징
메인 스레드에서 실행됨을 컴파일러가 보장
UI 관련 작업 시 충돌이나 크래시 방지
클래스, 함수, 변수 등 모든 선언에 사용 가능
🔸 예시
1 2 3 4 5 6 7 8 9 10 11 12 13 14
@MainActor classViewModel { var title: String=""
funcupdateTitle() { title ="Updated on Main Thread" } }
let viewModel =ViewModel()
Task { await viewModel.updateTitle() }
또는 메서드 단위에도 적용 가능:
1 2 3 4 5 6 7 8
classViewModel { var title: String=""
@MainActor funcupdateTitle() { title ="Updated on Main Thread" } }
✅ actor vs @MainActor 요약 비교
항목
actor
@MainActor
목적
데이터 레이스 방지
메인 스레드에서의 안전한 실행 보장
스레드
내부 직렬 처리 (스레드 추상화됨)
무조건 메인 스레드
용도
동시성 환경에서 상태 관리
UI 작업, UIKit/SwiftUI 관련 처리
사용 위치
클래스처럼 정의 가능
함수, 클래스, 프로퍼티 등에 어노테이션
접근 방식
await 필요
await 필요 (MainActor-isolated)
📌 참고
actor는 동시성 안전 객체를 만드는 방식
@MainActor는 해당 코드가 UI 스레드에서 실행되도록 지정
공부 더 하자!!!!!!!
1 2 3 4 5 6 7 8 9 10 11 12 13
주요 동시성 키워드 목록 키워드 설명 async 비동기 함수 선언. 호출 시 await 필요 await async 함수의 결과를 기다릴 때 사용 Task 새로운 비동기 작업(경량 스레드)을 시작 TaskGroup 여러 비동기 작업을 그룹으로 병렬 실행 actor 상태를 보호하는 동시성-safe 객체 @MainActor 메인 스레드에서 실행되도록 보장 @Sendable 스레드 간 안전하게 전달 가능한 클로저 보장 nonisolated actor 안에서 동기적으로 접근 가능한 함수 선언 DetachedTask actor나 context와 분리된 비동기 작업 실행 withCheckedContinuation 기존 콜백 기반 코드를 async/await로 바꾸기 위한 브릿지 withTaskGroup 여러 작업을 동시에 실행하고 결과를 모을 때 사용