[swift] Swift에서 as! 키워드를 사용한 강제 타입 변환과 동시에 타입 확인

Swift에서는 다양한 타입 변환 연산자를 제공하여 다른 타입으로 변환할 수 있습니다. 그 중에서도 as! 키워드는 강제 타입 변환과 동시에 타입을 확인할 수 있도록 도와줍니다.

as!를 사용하여 객체를 강제 타입 변환하면, 해당 타입으로 변환할 수 없는 경우 런타임 오류가 발생합니다. 이를테면, 부모 클래스를 자식 클래스로 변환하려고 시도하거나, 타입이 일치하지 않는 캐스팅을 시도할 경우 발생합니다.

다음은 as! 키워드를 사용하여 강제 타입 변환과 동시에 타입을 확인하는 예시 코드입니다.

class Animal {
    func makeSound() {
        print("Animal makes a sound")
    }
}

class Dog: Animal {
    override func makeSound() {
        print("Dog barks")
    }
}

class Cat: Animal {
    override func makeSound() {
        print("Cat meows")
    }
}

let animal: Animal = Dog()

if let dog = animal as? Dog {
    dog.makeSound() // "Dog barks"
} else {
    print("Conversion to Dog failed")
}

if let cat = animal as? Cat {
    cat.makeSound()
} else {
    print("Conversion to Cat failed") // "Conversion to Cat failed"
}

위 코드에서는 animal 객체를 Dog 타입으로 강제 타입 변환하려고 시도하므로, 첫 번째 if 문은 성공하여 “Dog barks”가 출력됩니다. 하지만 Cat 타입으로의 강제 타입 변환은 실패하므로, 두 번째 if 문은 실패하여 “Conversion to Cat failed”가 출력됩니다.

as! 키워드를 사용할 때는 주의해야 합니다. 타입 변환이 항상 성공할 것이라는 보장이 없으므로, 변환을 수행하기 전에 반드시 타입을 확인하는 것이 좋습니다. 타입 확인을 위한 옵셔널 바인딩(if-let 구문)을 사용하면 안전하게 타입 변환과 동시에 타입을 확인할 수 있습니다.

더 자세한 내용은 Swift 공식 문서를 참고하세요.