[swift] 프로토콜의 사용 예시

프로토콜은 유연하고 재사용 가능한 코드를 작성하기 위한 중요한 도구입니다. 프로토콜을 사용하면 다른 유형의 객체 간에 특정한 동작을 공유할 수 있습니다. 이번에는 프로토콜의 사용 예시를 살펴보겠습니다.

프로토콜 정의

먼저, Shape 프로토콜을 정의해보겠습니다. 이 프로토콜은 기본적인 도형의 동작을 정의합니다.

protocol Shape {
    var area: Double { get }
    func draw()
}

위의 예제 코드에서 Shape 프로토콜은 area 속성과 draw() 메서드를 가지고 있습니다. 이제 이 프로토콜을 채택하는 구조체와 클래스를 작성해보겠습니다.

프로토콜 채택

다음은 Circle 구조체가 Shape 프로토콜을 채택하는 예시입니다.

struct Circle: Shape {
    var radius: Double
    var area: Double {
        return Double.pi * radius * radius
    }
    
    func draw() {
        print("Drawing a circle")
    }
}

Circle 구조체에서 Shape 프로토콜의 요구사항을 모두 구현하고, areadraw()를 각각 계산 속성과 메서드로 구현했습니다.

다음으로, Rectangle 클래스가 Shape 프로토콜을 채택하는 예시를 살펴보겠습니다.

class Rectangle: Shape {
    var width: Double
    var height: Double
    var area: Double {
        return width * height
    }
    
    func draw() {
        print("Drawing a rectangle")
    }
}

Rectangle 클래스 또한 Shape 프로토콜의 요구사항을 모두 구현하고 있습니다.

활용 예시

이제 이 두 객체를 사용해서 프로토콜의 유연성과 재사용성을 확인해볼 수 있습니다.

func printShapeDetails(_ shape: Shape) {
    print("Area: \(shape.area)")
    shape.draw()
}

let circle = Circle(radius: 5.0)
let rectangle = Rectangle(width: 3.0, height: 4.0)

printShapeDetails(circle)
printShapeDetails(rectangle)

위의 printShapeDetails 함수는 Shape 프로토콜을 준수하는 어떤 객체든지 출력할 수 있습니다. 이를 통해 코드의 유연성과 재사용성이 높아짐을 확인할 수 있습니다.

프로토콜은 객체 간의 상호작용을 표준화하고, 유연하고 재사용 가능한 코드를 작성하는 데 큰 도움이 됩니다.

참고 자료: Apple Developer Documentation - Protocols

이상으로 프로토콜의 사용 예시를 살펴보았습니다.