🔥 API 사용 가능성 확인하기
Swift에는 API 사용 가능성을 확인하는 기능이 내장되어 있습니다. 이를 통해 개발자는 특정 배포 대상에서 사용할 수 없는 API를 실수로 사용하는 일을 방지할 수 있죠.
컴파일러는 SDK의 사용 가능성 정보를 활용하여 프로젝트에서 지정한 배포 대상에서 코드에 사용된 모든 API를 사용할 수 있는지 확인합니다. 만약 사용할 수 없는 API를 사용하려고 하면 Swift는 컴파일 시점에 오류를 보고하게 됩니다.
if
문이나 guard
문에서 사용 가능성 조건
을 사용하여 런타임에 사용하려는 API를 사용할 수 있는지에 따라 코드 블록을 조건부로 실행할 수 있습니다. 컴파일러는 사용 가능성 조건의 정보를 사용하여 해당 코드 블록의 API를 사용할 수 있는지 확인합니다.
if #available(iOS 10, macOS 10.12, *) { // iOS에서는 iOS 10 API를, macOS에서는 macOS 10.12 API를 사용합니다. } else { // 이전 버전의 iOS와 macOS API로 대체합니다. }
swift
위의 사용 가능성 조건은 iOS에서는 iOS 10 이상에서만, macOS에서는 macOS 10.12 이상에서만 if
문의 본문이 실행되도록 지정합니다. 마지막 인수 *
는 필수이며, 다른 플랫폼에서는 대상에 지정된 최소 배포 대상에서 if
문의 본문이 실행됨을 지정합니다.
사용 가능성 조건의 일반적인 형태는 플랫폼 이름과 버전의 목록을 가집니다. iOS
, macOS
, watchOS
, tvOS
와 같은 플랫폼 이름을 사용하며, 전체 목록은 선언 특성을 참조하세요. iOS 8이나 macOS 10.10과 같은 주요 버전 번호 외에도 iOS 11.2.6 및 macOS 10.13.3과 같은 부 버전 번호를 지정할 수 있습니다.
if #available(<#platform name#> <#version#>, <#...#>, *) { <#API를 사용할 수 있는 경우 실행할 구문#> } else { <#API를 사용할 수 없는 경우 실행할 대체 구문#> }
swift
guard
문과 함께 사용 가능성 조건을 사용하면 해당 코드 블록의 나머지 코드에 사용되는 사용 가능성 정보를 개선할 수 있습니다.
@available(macOS 10.12, *) struct ColorPreference { var bestColor = "blue" } func chooseBestColor() -> String { guard #available(macOS 10.12, *) else { return "gray" } let colors = ColorPreference() return colors.bestColor }
swift
위의 예에서 ColorPreference
구조체는 macOS 10.12 이상이 필요합니다. chooseBestColor()
함수는 사용 가능성 가드로 시작됩니다. 플랫폼 버전이 ColorPreference
를 사용하기에 너무 오래된 경우 항상 사용 가능한 동작으로 대체됩니다. guard
문 이후에는 macOS 10.12 이상이 필요한 API를 사용할 수 있습니다.
Swift는 #available
외에도 불가능성 조건
을 사용하여 반대 확인을 지원합니다. 예를 들어 다음 두 가지 확인은 같은 작업을 수행합니다.
if #available(iOS 10, *) { } else { // 대체 코드 } if #unavailable(iOS 10) { // 대체 코드 }
swift
#unavailable
형식을 사용하면 확인에 대체 코드만 포함된 경우 코드를 더 읽기 쉽게 만들 수 있습니다.
API 가용성 확인 기능을 활용하면 다음과 같은 장점이 있습니다:
- 배포 대상에서 지원하지 않는 API 사용을 방지하여 런타임 오류를 줄일 수 있습니다.
- 컴파일 시점에 API 호환성 문제를 파악할 수 있어 개발 효율성이 높아집니다.
- 코드의 가독성과 유지보수성이 향상됩니다.
따라서 API 가용성 확인은 Swift 개발에 있어 중요한 기능 중 하나라고 할 수 있겠네요.