iOS 응용 (swift)
[iOS - swift] @retroactive 개념 (Swift6, Xcode16)
jake-kim
2024. 12. 2. 01:14
retroactive 개념
- 단어의 의미
- "효력이 소급하는"이라는 의미
- 소급하다란 의미는 새롭게 적용된 것이 과거에도 영향을 미친다는 의미
- ex) 직장인이 25년도 3월에 연봉이 올랐는데, 1월과 2월 월급도 3월에 연봉 오른 값으로 돈을 더 주는 것
- Swift6.0에서도 @retroactive를 사용하여 코드의 유연성을 가져갈 수 있는데 아래에서 계속 설명
@retroactive의 의미
- 이번 프로젝트에서 Foundation에 있는 Date를 사용하다가 id가 필요하여 내가 임의로 Identifiable을 선언한 상태
extension Date: Identifiable {
public var id: TimeInterval { timeIntervalSince1970 }
}
- 1년 후에 갑자기 애플이 Date에 Identifiable를 conform하도록 채택했다면?
- extension으로 똑같은 프로토콜을 conform하면 컴파일 에러가 발생하는데, 애플에 의해서 아무잘못 없는 내 코드가 컴파일 에러가 나면 너무 유연성이 없어지므로 애플은 아래처럼 컴파일 에러 대신 경고메시지를 출력하도록 함
/tmp/retro.swift:3:1: warning: extension declares a conformance of imported type
'Date' to imported protocol 'Identifiable'; this will not behave correctly if
the owners of 'Foundation' introduce this conformance in the future
extension Date: Identifiable {
^
- 난 이 경고 메시지도 안보이게 하고 싶을때? -> @retroactive를 사용
- @retroactive 소급적용된다는 의미를 생각하여, 의미를 확인하면 애플이 비록 Date에 Identifiable로 conform하는 코드가 생겨났지만, 내 extension을 적용하라는 의미
extension Date: @retroactive Identifiable {
// ...
}
* 참고