[swift] 프로토콜을 통한 다형성 구현

이번에는 Swift에서 프로토콜을 활용하여 다형성을 구현하는 방법에 대해 살펴보겠습니다. 다형성은 객체 지향 프로그래밍의 중요한 특징 중 하나로, 같은 인터페이스에 대해 다양한 구현을 제공할 수 있는 능력을 말합니다.

프로토콜을 사용하여 객체 간의 상호 작용을 정의하고, 다양한 타입의 객체를 함께 사용할 수 있습니다.

프로토콜 정의

먼저, 프로토콜을 정의하여 여러 객체들이 따라야 하는 규약을 명시합니다. 프로토콜은 메서드, 프로퍼티, 이니셜라이저, 서브스크립트 등을 요구할 수 있습니다.

protocol Drawable {
    func draw()
}

위의 예제에서, Drawable 프로토콜은 draw() 메서드를 요구합니다.

프로토콜 채택 및 구현

이제 프로토콜을 채택하고 해당 프로토콜을 구현하는 객체를 만들어봅시다.

class Circle: Drawable {
    func draw() {
        // Draw the circle
    }
}

class Square: Drawable {
    func draw() {
        // Draw the square
    }
}

Circle 클래스와 Square 클래스는 Drawable 프로토콜을 채택하여 draw() 메서드를 구현하고 있습니다.

다형성 구현

이제 Drawable 프로토콜을 이용하여 배열에 여러 객체를 저장하고, 해당 객체들을 순회하면서 동일한 메서드를 호출하는 예제를 살펴봅시다.

let shapes: [Drawable] = [Circle(), Square()]

for shape in shapes {
    shape.draw()
}

위의 예제에서, shapes 배열은 Drawable 프로토콜을 채택한 객체들을 저장하고 있습니다. 이후 순회를 통해 draw() 메서드가 호출되는 것을 볼 수 있습니다.

이처럼 프로토콜을 활용하면 다형성을 구현할 수 있으며, 각 객체의 특정 구현을 몰라도 동일한 인터페이스를 통해 서로 다른 동작을 수행할 수 있습니다.

프로토콜을 통한 다형성은 Swift에서 객체 지향 프로그래밍의 강력한 기능 중 하나로, 객체 간의 유연성을 확보하는 데 유용하게 활용됩니다.

참고 자료

  1. Swift.org - Protocols
  2. Hacking with Swift - Protocol-Oriented Programming
  3. RayWenderlich.com - Understanding Swift Protocol Extensions