iOS/Swift Concurrency
@preconcurrency
Hamp
2025. 5. 12. 22:31
반응형

👋 들어가기 전
이번에 학습할 속성은 @preconcurrency다.
많이 무겁지 않으니 바로 시작해보자
🏁 학습할 내용
- @preconcurrency란?
- 언제 사용할까?
- @unchecked Sendable과 차이
🏁 @preconcurrency란
📋 정의
Sendable 체크 이전에 작성된 코드이며, 동시성 안전성을 보장하지 않아도 경고 없이 사용할 수 있다.
❓언제 사용할까?
Swift6 도입하면서 동시성에 대한 엄격한 검사(strict concurrency)가 컴파일 타임에 진행된다.
이때 이전 부터 운영된 서비스들의 API를 모두 Swift6에 맞게 바꾸게 된다면
그 비용을 한번에 부담하기에는 개발자 입장이 매우 곤란하다.
이 때 @preconcurrency는 다음과 같은 2개의 입장을 표현한다.
1. 옛날 코드도 안전하니깐 얘는 안바꿀꺼임
2. 옛날 코드지만 나중에 바꿀 수 있으니 지금은 일단 쓰자.
이런 의미를 갖기 때문에 컴파일 타임에 동시성 관련 경고를 무시한다.
사용은 다음과 같이 모듈 import, protocol, class 등 다양한 타입 선언 시 사용된다.
@preconcurrency import oldModule
@preconcurrency protocol OldProtocol {
}
@preconcurrency class OldClass {
}
@preconcurrency struct OldStruct {
}
@preconcurrency func oldFunction() async throws -> Void {
}
⚠️ @unchecked Sendable과 차이
앞에서 배운 @unchecked Sendable 역시, 동시성 관련 경고를 무시하는 특징을 갖고 있다.
그렇다면 어떤 차이가 있을까?
| @preconcurrency | @unchecked Sendable | |
| 역할 | 과거 API의 동시성 경고무시 | Sendable 검사 생략 |
| 목적 | 기존 코드 호환성 확보 | Sendable 수동 보장 |
😀 소감 및 마무리
자주 봤던 속성인데 역할이 무겁지 않아서, 이제 문서를 볼 때 많이 두려워 할 필요는 없을 것 같다.
출처
반응형