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 수동 보장

😀 소감 및 마무리

자주 봤던 속성인데 역할이 무겁지 않아서, 이제 문서를 볼 때 많이 두려워 할 필요는 없을 것 같다.


출처

반응형