[swift] 제네릭을 사용하여 다형성(polymorphism)을 어떻게 구현하는가?

스위프트에서 다형성은 제네릭을 사용하여 구현할 수 있습니다. 제네릭은 타입에 대한 추상화를 제공하여 여러 타입에 대해 동일한 동작을 수행할 수 있도록 합니다.

다음은 제네릭을 사용하여 다형성을 구현하는 간단한 예제입니다.

protocol Animal {
    func makeSound()
}

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

class Cat: Animal {
    func makeSound() {
        print("야옹")
    }
}

func letAnimalMakeSound<T: Animal>(_ animal: T) {
    animal.makeSound()
}

let dog = Dog()
let cat = Cat()

letAnimalMakeSound(dog)  // "멍멍" 출력
letAnimalMakeSound(cat)  // "야옹" 출력

위 예제에서 Animal 프로토콜은 makeSound 메서드를 가지고 있습니다. 이 프로토콜을 채택하는 DogCat 클래스는 각각 다른 소리를 출력하도록 구현되어 있습니다. letAnimalMakeSound 함수는 제네릭을 이용하여 Animal 프로토콜을 따르는 어떤 타입의 객체도 받아들일 수 있도록 정의되어 있습니다.

이와 같이 제네릭을 사용하면 다양한 타입의 객체를 동일한 방식으로 다룰 수 있으며, 이는 다형성을 가능하게 합니다.

참고 자료: https://docs.swift.org/swift-book/LanguageGuide/Generics.html