[swift] 타입 캐스팅을 활용한 프로토콜 구현

프로그래밍에서 다형성을 구현하기 위해 타입 캐스팅과 프로토콜을 함께 활용할 수 있습니다. 이 글에서는 Swift에서 타입 캐스팅과 프로토콜을 어떻게 활용하는지 살펴보겠습니다.

타입 캐스팅

타입 캐스팅은 인스턴스의 타입을 확인하거나 다른 타입으로 캐스팅하는 과정을 말합니다. Swift에서는 isas 연산자를 사용하여 타입 캐스팅을 수행할 수 있습니다.

class Animal {
    func makeSound() {
        print("Some sound")
    }
}

class Dog: Animal {
    func barking() {
        print("Woof")
    }
}

let animal: Animal = Dog()
if animal is Dog {
    let dog = animal as Dog
    dog.barking()
}

위 예제에서 animalDog 타입이 맞는지 확인한 후, 맞다면 as 키워드를 사용하여 Dog 타입으로 캐스팅하여 barking 메서드를 호출합니다.

프로토콜 구현과 타입 캐스팅

프로토콜은 특정 역할을 수행하기 위한 메서드, 프로퍼티, 기타 요구사항들의 청사진을 정의합니다. 클래스, 구조체, 열거형은 프로토콜을 채택하여 프로토콜에서 요구하는 기능을 구현할 수 있습니다.

protocol Movable {
    func move()
}

class Person: Movable {
    func move() {
        print("Walking")
    }
}

class Car: Movable {
    func move() {
        print("Driving")
    }
}

let movableThings: [Movable] = [Person(), Car()]

for thing in movableThings {
    if let person = thing as? Person {
        person.move()
    } else if let car = thing as? Car {
        car.move()
    }
}

위 예제에서는 Movable 프로토콜을 구현한 PersonCar 클래스를 만들고, movableThings 배열에 각각의 인스턴스를 저장한 후 타입 캐스팅을 통해 각각의 동작을 수행합니다.

타입 캐스팅과 프로토콜을 함께 사용하면 객체 지향 프로그래밍에서 다형성을 구현하는데 매우 유용합니다.

결론

타입 캐스팅은 Swift에서 객체의 타입을 동적으로 확인하고 캐스팅할 수 있는 강력한 도구입니다. 이를 활용하여 프로토콜과 결합하면 유연하고 확장 가능한 코드를 작성할 수 있습니다.

참고 문헌: Swift 공식문서