Any, AnyObject

Swift

DG
2 min readJul 21, 2024

Any

  • Any는 Swift에서 모든 타입을 나타낼 수 있습니다.
  • 기본 데이터 타입(Int, Float, Bool 등), 구조체(struct), 열거형(enum), 클래스(class), 함수 타입 등 모든 타입을 포함합니다.
  • Swift의 타입 시스템에서 가장 범용적인 타입으로, 모든 종류의 값(value)을 담을 수 있습니다.

AnyObject

  • AnyObject는 모든 클래스 타입을 나타냅니다.
  • 클래스 인스턴스만을 참조할 수 있으며, 구조체(struct)나 열거형(enum) 등의 값 타입은 포함하지 않습니다.

주요 차이점

  1. 포함 가능한 타입의 범위
    Any: 모든 타입을 포함할 수 있습니다. (클래스, 구조체, 열거형, 기본 타입 등)
    AnyObject: 클래스 타입만 포함할 수 있습니다.
  2. 타입 안전성:
    Any는 모든 타입을 포함할 수 있기 때문에, 값의 실제 타입을 확인할 때 타입 캐스팅이 필요합니다.
    AnyObject는 클래스 타입으로 한정되므로, 클래스 인스턴스만을 다룰 때 조금 더 타입 안전성을 보장할 수 있습니다.
  3. 사용 상황:
    Any는 다양한 타입을 다루어야 할 때 유용합니다. 예를 들어, 서로 다른 타입의 값들을 담아야 하는 배열이나 딕셔너리 등에 사용됩니다.
    AnyObject는 주로 클래스 인스턴스만을 다루어야 하는 경우에 사용됩니다. Objective-C와의 상호 운용성에서도 유용합니다.

예시를 통한 비교

// Any를 사용한 예시
var values: [Any] = []
values.append(1) // Int
values.append("Hello") // String
values.append([1, 2, 3]) // Array<Int>

// AnyObject를 사용한 예시
class ExampleClass {}
var objectValues: [AnyObject] = []
objectValues.append(ExampleClass())
// objectValues.append(1) // 오류: Int는 클래스 타입이 아니기 때문에 추가할 수 없습니다.

--

--

DG
DG

Written by DG

한국의 iOS 개발자이다. 강아지와 운동을 좋아함. github: https://github.com/donggyushin

No responses yet