타입 캐스팅을 수행할 때 일반적으로 상속관계에 있는 클래스끼리만 캐스팅이 가능하지만,
Any와 AnyObect 타입을 사용할 경우 상속 관계에 있지 않아도 타입 캐스팅을 할 수 있습니다.
Any
- Any는 함수 타입을 포함하여 모든 타입의 인스턴스를 나타낼 수 있습니다.
실습
- Any 타입엔 Value타입(구조체, 열거형), Reference타입(클래스) 상관없이 모두 저장이 가능.
var TestArray: [Any] = []
TestArray.append(1)
TestArray.append(1.0)
TestArray.append("String")
TestArray.append(true)
TestArray.append({print("Hello World!")})
print(TestArray)
print(type(of:TestArray))
실행 결과
AnyObject
- AnyObject는 프로토콜입니다.
- 모든 클래스 타입의 인스턴스를 나타낼 수 있습니다.
- AnyObject 타입은 클래스 타입만 저장 가능.
실습 : 구조체 출력
var TestArray: [AnyObject] = []
TestArray.append(1)
TestArray.append(1.0)
TestArray.append("String")
TestArray.append(true)
TestArray.append({print("Hello World!")})
print(TestArray)
print(type(of:TestArray))
실행 결과 : 에러
실습2 : 클래스 출력
class Monster{
}
var TestArray: [AnyObject] = []
TestArray.append(Monster.init())
print(TestArray)
print(type(of:TestArray))
실행 결과
정리
- Any는 Value Type(구조체, 열거형)과 Reference Type(클래스) 상관없이 모든 타입의 인스턴스를 표현 가능합니다.
- AnyObject는 클래스, 클래스 타입 또는 클래스 전용 프로토콜의 인스턴스만 표현 가능합니다.
내용 출처
https://zeddios.tistory.com/213
https://babbab2.tistory.com/128
'iOS > iOS' 카테고리의 다른 글
Core Data (0) | 2022.04.14 |
---|---|
Codable (0) | 2022.04.13 |
모든 View Controller 객체의 상위 클래스는 무엇이고 그 역할은 무엇인가? (0) | 2022.04.09 |
prepareForReuse (0) | 2022.04.08 |
Class의 성능을 향상 시킬 수 있는 방법들을 나열해보시오. (0) | 2022.04.07 |
댓글