[swift] 타입 캐스팅을 활용한 객체 변환

Swift에서는 객체의 타입을 확인하거나 다른 타입으로 변환하는 타입 캐스팅을 제공합니다. 이 기능을 사용하면 안전하게 객체를 변환하고, 실행 시간에 타입 안정성을 보장할 수 있습니다.

1. 타입 캐스팅이란 무엇인가요?

타입 캐스팅은 객체의 타입을 확인하거나, 서로 다른 클래스 계층 구조 사이에서 상속 관계를 가진 객체로 변환하는 프로세스를 말합니다. 타입 캐스팅은 다음 두 가지 방법으로 수행할 수 있습니다.

2. 타입 캐스팅의 활용 예시

아래 예제는 Vehicle 클래스를 상속받은 Car 클래스와 Bicycle 클래스가 있습니다.

class Vehicle {
    var currentSpeed = 0
    func makeNoise() {
        // Vehicle의 기본 구현
    }
}

class Car: Vehicle {
    var gear = 1
    override func makeNoise() {
        // Car의 특정한 구현
    }
}

class Bicycle: Vehicle {
    var hasBasket = false
}

이제 Vehicle 타입의 객체를 만든 후, 이를 Car 또는 Bicycle 타입의 객체로 변환해 보겠습니다.

let someVehicle = Vehicle()
someVehicle.makeNoise() // Vehicle의 makeNoise() 호출

// Vehicle 타입의 객체를 Car 타입의 객체로 변환
if let car = someVehicle as? Car {
    car.makeNoise() // 오버라이드된 Car의 makeNoise() 호출
    print("This is a Car")
} else {
    print("This is not a Car")
}

// Vehicle 타입의 객체를 Bicycle 타입의 객체로 변환
if let bicycle = someVehicle as? Bicycle {
    bicycle.makeNoise() // Vehicle 기본 구현의 makeNoise() 호출
    print("This is a Bicycle")
} else {
    print("This is not a Bicycle")
}

위 예제에서는 as? 연산자를 사용하여 Vehicle 타입의 객체를 Car 또는 Bicycle 타입의 객체로 안전하게 변환하고 실행 결과를 확인하고 있습니다.

타입 캐스팅은 코드의 유연성 및 안전성을 높이는 데 도움이 됩니다. 안전하게 타입을 변환하고 해당 타입의 메서드나 프로퍼티에 접근할 수 있도록 해주기 때문에 리팩터링이나 확장성 측면에서 유용하게 활용될 수 있습니다.

결론

타입 캐스팅은 Swift에서 객체 간의 변환을 쉽게 해주는 강력한 도구입니다. 이를 통해 객체의 타입을 확인하고 안전하게 변환하여 원하는 동작을 수행할 수 있습니다. 타입 캐스팅은 코드의 유연성을 높이고, 실행 시간에 안전성을 확보하는 데 도움이 됩니다.

참고 자료: The Swift Programming Language - Type Casting