[swift] 다형성을 통한 상속 클래스 활용 사례

다형성(polymorphism)은 객체지향 프로그래밍 언어에서 여러 클래스가 하나의 인터페이스나 추상클래스를 구현하여 동일한 메서드 호출에 대해 각각 다르게 응답할 수 있는 기능을 말합니다.

Swift에서는 프로토콜을 통해 다형성을 구현할 수 있습니다. 프로토콜은 특정 역할을 위한 메서드, 프로퍼티, 이니셜라이저 등의 요구사항을 정의합니다. 이를 채택한 클래스나 구조체는 프로토콜의 요구사항을 구현하여 다형성을 실현할 수 있습니다.

다형성을 활용하여 상속 클래스를 구현하는 경우가 많습니다. 예를 들어, 동물을 나타내는 Animal 프로토콜과 이를 채택한 Dog, Cat 클래스를 만들어보겠습니다.

protocol Animal {
    func makeSound()
}

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

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

이렇게 구현하면 DogCat 클래스는 각각 Animal 프로토콜을 따르게 됩니다. 그러므로 Animal 타입으로 선언된 변수나 상수에 DogCat 객체를 할당할 수 있습니다.

let myDog: Animal = Dog()
let myCat: Animal = Cat()

myDog.makeSound() // 출력: "멍멍!"
myCat.makeSound() // 출력: "야옹!"

이처럼 다형성을 통해 상속 클래스를 활용하는 것은 코드의 유연성과 확장성을 높여줍니다. 만약 새로운 동물을 추가하고 싶다면, 해당 프로토콜을 채택하는 새로운 클래스를 만들기만 하면 되므로 코드의 변화에 유연하게 대처할 수 있게 됩니다.

다형성은 객체지향 프로그래밍의 중요한 개념 중 하나이며, Swift에서도 이를 효과적으로 활용하여 유연하고 확장성 있는 코드를 작성할 수 있습니다.

참고 자료