🔥 버전 호환성

288자
4분

이 책에서는 Xcode 15.3에 포함된 Swift의 기본 버전인 Swift 5.10에 대해 설명합니다. Xcode 15.3을 사용하면 Swift 5.10, Swift 4.2 또는 Swift 4로 작성된 타겟을 빌드할 수 있어요.

Xcode 15.3을 사용하여 Swift 4 및 Swift 4.2 코드를 빌드할 때 대부분의 Swift 5.10 기능을 사용할 수 있습니다. 그러나 다음 변경 사항은 Swift 5.10 이상을 사용하는 코드에서만 사용할 수 있답니다:

  1. 불투명한 타입을 반환하는 함수에는 Swift 5.1 런타임이 필요해요.
func getRandomNumber() -> some Equatable {
    return Int.random(in: 1...100)
}
swift
  1. Swift 5.10 이전에는 try?를 사용할 때 주의해야 할 점이 있었어요. 옵셔널 값을 반환하는 함수에 try?를 사용하면, 반환 값이 이중 옵셔널(Optional<Optional<T>>)이 되곤 했죠. 하지만 Swift 5.10부터는 이런 동작이 개선되었습니다.
func fetchData() throws -> String? {
    // ...
}
 
let data = try? fetchData() // Swift 5.10 이전: Optional<Optional<String>>
                            // Swift 5.10 이후: Optional<String>
swift

이제 try?를 사용해도 불필요한 중첩 옵셔널이 생기지 않아요. 옵셔널 값을 반환하는 함수에 try?를 사용하면, 결과는 단일 옵셔널로 나타납니다. 이렇게 되면 코드의 가독성이 좋아지고, 옵셔널 바인딩이나 옵셔널 체이닝 등의 작업도 더 간편해집니다.

  1. 큰 정수 리터럴 초기화 표현식은 올바른 정수 타입으로 유추됩니다. 예를 들어, UInt64(0xffff_ffff_ffff_ffff)는 오버플로우가 발생하는 대신 올바른 값으로 평가됩니다.
let maxUInt64 = UInt64(0xffff_ffff_ffff_ffff) // 올바르게 초기화됨
swift

동시성은 Swift 5.10 이상과 해당 동시성 타입을 제공하는 Swift 표준 라이브러리 버전이 필요합니다. Apple 플랫폼에서는 iOS 13, macOS 10.15, tvOS 13 또는 watchOS 6 이상의 배포 대상을 설정하세요.

Swift 5.10으로 작성된 타겟은 Swift 4.2 또는 Swift 4로 작성된 타겟에 의존할 수 있으며, 그 반대도 가능합니다. 이는 여러 프레임워크로 나뉜 대규모 프로젝트가 있는 경우 한 번에 하나의 프레임워크씩 코드를 Swift 4에서 Swift 5.10으로 마이그레이션할 수 있음을 의미하죠.

Swift 버전 간의 호환성을 이해하면 프로젝트를 점진적으로 업그레이드하고 새로운 Swift 기능을 활용할 수 있습니다. 코드 마이그레이션 시 주의 사항을 숙지하고 적절한 전략을 세워 프로젝트를 원활하게 업데이트해 나가시기 바랍니다.