Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Archives
Today
Total
관리 메뉴

J

[Swift] @available 본문

Swift

[Swift] @available

yujaehui 2024. 5. 19. 19:34

`@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. 주의사항

  1. 이전 플랫폼에서의 접근 방지
    • `@available`이 없는 코드에서 잘못 호출하면 컴파일 에러가 발생.
    • 반드시 조건을 명확히 정의.
  2. 호환성을 유지하기 위한 경고
    • 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