[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
메서드를 가지고 있습니다. 이 프로토콜을 채택하는 Dog
와 Cat
클래스는 각각 다른 소리를 출력하도록 구현되어 있습니다. letAnimalMakeSound
함수는 제네릭을 이용하여 Animal
프로토콜을 따르는 어떤 타입의 객체도 받아들일 수 있도록 정의되어 있습니다.
이와 같이 제네릭을 사용하면 다양한 타입의 객체를 동일한 방식으로 다룰 수 있으며, 이는 다형성을 가능하게 합니다.
참고 자료: https://docs.swift.org/swift-book/LanguageGuide/Generics.html