Swift에서 타입을 검사하거나 다른 타입으로 변환할 수 있게 해주는 기능입니다.
주로 클래스 상속 구조에서 부모 ↔️ 자식 클래스 간에 사용합니다.
| 연산자 | 설명 |
|---|---|
is | 타입 확인 (Bool 반환) |
as? | 옵셔널 다운캐스팅 (실패 시 nil) |
as! | 강제 다운캐스팅 (실패 시 런타임 오류 발생) |
class Animal {}
class Dog: Animal {
func bark() { print("🐶 멍멍!") }
}
let pet: Animal = Dog()
// ✅ 타입 확인
if pet is Dog {
print("Dog 타입이에요!") // true
}
// ✅ 안전한 다운캐스팅
if let dog = pet as? Dog {
dog.bark() // "멍멍!"
}
// ⚠️ 강제 다운캐스팅 (실패하면 crash!)
let dog = pet as! Dog
dog.bark()
| 용어 | 설명 | 예시 |
|---|---|---|
| 업캐스팅 | 자식 → 부모 (자동) | let a: Animal = Dog() |
| 다운캐스팅 | 부모 → 자식 (수동) | a as? Dog, a as! Dog |
let value: Any = "Hello"
if let string = value as? String {
print(string) // "Hello"
}
Any: 모든 타입
AnyObject: 모든 클래스 타입
is: 타입 확인용
as?: 안전한 변환 (옵셔널)
as!: 강제 변환 (위험 ❗️)
클래스 상속 구조나 Any 타입 다룰 때 필수 도구