J
[Swift] @available 본문
`@available`
`@available`는 Swift 코드에서 특정 플랫폼과 버전 조건에 따라 접근 가능성을 선언하는 데 사용.
이는 컴파일러에게 해당 코드가 특정 플랫폼 버전 이상에서만 사용할 수 있음을 알리기 위한 주석으로 작동.
주로 함수, 클래스, 구조체, 프로토콜, 속성 등 선언부에 사용.
1. `@available` 기본 문법
@available(platformName version, *, deprecated: version, message: "reason")
주요 구성 요소
- platformName: iOS, macOS, watchOS, tvOS 등의 플랫폼 이름.
- version: 플랫폼 버전 번호.
- `*`: 다른 모든 플랫폼을 포함.
- deprecated: 코드가 특정 버전 이상에서 더 이상 권장되지 않음을 나타냄.
- message: 경고 메시지를 제공하여 더 많은 정보를 전달.
2. 사용 예시
속성에 사용
속성이 특정 버전 이상에서만 접근 가능함을 명시.
class Feature {
@available(iOS 15, *)
var newFeature: String {
"iOS 15에서만 사용 가능"
}
}
함수 선언에 사용
특정 버전 이상에서만 사용 가능한 함수를 선언할 때 유용.
@available(iOS 16, macOS 13, *)
func modernFunction() {
print("최신 기능 실행")
}
클래스에 사용
클래스나 구조체 전체가 특정 플랫폼 버전 이상에서만 사용 가능하도록 제한.
@available(iOS 14, *)
class ModernClass {
func run() {
print("iOS 14 이상에서 사용 가능")
}
}
3. 플랫폼 및 조건 조합
여러 플랫폼이나 조건을 조합해서 사용할 수 있음.
예시: 다중 플랫폼 지원
@available(iOS 16, macOS 13, watchOS 9, *)
func crossPlatformFunction() {
print("다중 플랫폼에서 동작")
}
예시: 특정 버전에서만 사용 불가 처리
@available(iOS, deprecated: 15.0, message: "이 함수는 더 이상 권장되지 않습니다.")
func oldFunction() {
print("이전 함수 실행")
}
4. `@available`와 `#available`의 차이
`@available` | `#available` | |
사용 위치 | 선언부 (클래스, 함수, 속성 등) | 코드 실행부 (조건문, 로직 제어) |
용도 | API 가용성을 선언 | 런타임에서 플랫폼 및 버전 조건 확인 |
예제 | `@available(iOS 16, *) func myFunc() {}` | `if #available(iOS 16, *) { ... }` |
5. 사용 패턴 및 활용
런타임 조건 없이 컴파일 시점에만 제한
컴파일러가 코드의 유효성을 미리 확인하도록 도움.
@available(iOS 14, *)
struct NewUIComponent {
var body: String {
"새로운 UI 컴포넌트"
}
}
조건부 로직과 함께 사용
`@available`을 통해 선언하고, `#available`로 런타임 조건에 따라 동작을 달리할 수 있음.
@available(iOS 15, *)
func specialFeature() {
print("iOS 15 이상에서 실행 가능")
}
func performFeature() {
if #available(iOS 15, *) {
specialFeature()
} else {
print("이 기능은 iOS 15 이상에서만 사용 가능")
}
}
6. 주의사항
- 이전 플랫폼에서의 접근 방지
- `@available`이 없는 코드에서 잘못 호출하면 컴파일 에러가 발생.
- 반드시 조건을 명확히 정의.
- 호환성을 유지하기 위한 경고
- deprecated 속성을 사용하여 개발자들에게 이전 API 사용에 대한 경고를 제공.
7. 선택 가이드
사용 사례 | 적합한 조건 |
최신 API 사용 가능성 선언 | `@available` |
런타임 시점에서 조건부 실행 필요 | `#available` |
여러 플랫폼에서 동작 제어 필요 | 다중 플랫폼 조건 조합 |
구버전 API 경고 추가 | `@available(deprecated:)` |
8. 결론
`@available`은 코드의 접근 가능성을 명확히 하고 플랫폼 및 버전 조건을 컴파일 시점에 선언하여 안정성을 높이는 데 사용.
런타임 시점 조건 검사인 `#available`과 함께 사용하면 플랫폼 호환성을 쉽게 관리할 수 있음.
'Swift' 카테고리의 다른 글
[Swift] JSONEncoder.KeyEncodingStrategy (0) | 2024.06.27 |
---|---|
[Swift] #available (0) | 2024.05.19 |
[Swift] map (0) | 2024.04.19 |
[Swift] init (0) | 2024.04.18 |
[Swift] weak, unowned (0) | 2024.04.18 |