[TIL] 타입 캐스팅

박주하·2025년 5월 29일

타입 캐스팅(type casting)


객체의 실제 타입을 확인하거나 다른 타입으로 변환하는 데 사용된다. 주로 클래스의 상속 구조에서 많이 사용한다. 타입 캐스팅을 위해 is, as, as?, as! 키워드를 제공한다.


1. is: 타입 확인

객체가 특정 타입인지 확인할 때 사용한다. 결과는 Bool(true or false) 값을 반환한다.

let animal: Any = "고양이"

if animal is String {
    print("animal은 String 타입이에요!")
}

2. as: 업캐스팅(상위 타입으로 변환)

주로 컴파일 시점에 명확히 타입이 보장되는 경우에 사용한다. 보통은 업캐스팅이나 프로토콜 타입으로의 변환에 사용된다.

class Animal {}
class Dog: Animal {}

let dog = Dog()
let animal = dog as Animal  // Dog → Animal 업캐스팅

3. as?: 다운캐스팅(옵셔널 반환)

옵셔널 타입으로 결과를 반환하므로, 안전하게 사용할 수 있다. 실패하면 nil이 반환되므로, if let, guard let 등과 함께 사용한다.

let animal: Animal = Dog()

if let dog = animal as? Dog {
    print("animal은 실제로 Dog 타입이에요!")
}

4. as!: 강제 다운캐스팅(실패 시 런타임 오류)

실패하면 런타임 오류가 발생하므로, 변환이 반드시 성공한다고 확신할 때 사용하는 것이 좋다. 🚨절대로 확신이 없으면 as!는 피하는 게 좋다. as?가 더 안전하다.

let animal: Animal = Dog()
let dog = animal as! Dog  // 다운캐스팅 성공 (실패하면 앱 종료됨)

📌 정리

키워드설명결과 타입실패 시 동작
is타입인지 확인Bool-
as업캐스팅 / 명확한 변환명시된 타입컴파일 오류
as?조건부 다운캐스팅옵셔널nil 반환
as!강제 다운캐스팅명시된 타입런타임 오류

0개의 댓글