Notice
Recent Posts
Recent Comments
Link
관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - swift] @retroactive 개념 (Swift6, Xcode16) 본문

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 {
    // ...
}

* 참고

- https://github.com/swiftlang/swift-evolution/blob/main/proposals/0364-retroactive-conformance-warning.md

Comments