[swift] 다형성을 통해 여러 타입의 인스턴스를 동시에 다루는 방법

다형성은 객체지향 프로그래밍에서 중요한 개념으로, 여러 타입의 객체를 하나의 인터페이스로 다룰 수 있는 능력을 의미합니다. 스위프트에서는 프로토콜을 사용하여 다형성을 구현할 수 있습니다. 이를 통해 다양한 타입의 객체를 동시에 다루고, 인터페이스를 통일하여 코드의 유연성과 재사용성을 높일 수 있습니다.

프로토콜을 활용한 다형성

프로토콜은 메서드, 프로퍼티, 이니셜라이저 등의 요구사항을 정의할 수 있는데, 이를 통해 다양한 타입의 객체가 동일한 형식을 가지도록 할 수 있습니다. 예를 들어, 다음과 같이 Shape 프로토콜을 정의할 수 있습니다.

protocol Shape {
    func area() -> Double
}

이제 Shape 프로토콜을 채택하는 여러 타입의 객체를 만들어 다형성을 구현할 수 있습니다.

다형성의 활용

class Circle: Shape {
    let radius: Double
    init(radius: Double) {
        self.radius = radius
    }
    func area() -> Double {
        return Double.pi * radius * radius
    }
}

class Rectangle: Shape {
    let width: Double
    let height: Double
    init(width: Double, height: Double) {
        self.width = width
        self.height = height
    }
    func area() -> Double {
        return width * height
    }
}

위와 같이 CircleRectangle 클래스가 Shape 프로토콜을 채택하고, 각자의 형태에 맞게 area() 메서드를 구현했습니다.

다형성을 활용한 코드

let shapes: [Shape] = [Circle(radius: 5.0), Rectangle(width: 3.0, height: 4.0)]

for shape in shapes {
    print(shape.area())
}

위와 같이 CircleRectangle 인스턴스를 모두 Shape 타입으로 다룰 수 있습니다. area() 메서드는 각 객체의 실제 타입에 따라 적절한 방식으로 호출되어 다형성이 구현됩니다.

다형성을 통해 여러 타입의 객체를 효과적으로 다룰 수 있으며, 프로토콜을 활용하여 인터페이스를 통일하고 유연하고 재사용 가능한 코드를 작성할 수 있습니다.

참고 자료