[swift] 프로토콜을 통한 코드 재사용

프로토콜은 스위프트(Swift)에서 코드의 재사용성을 높이는 강력한 도구로, 인터페이스(Interface) 혹은 다른 언어에서 말하는 약속과 유사한 역할을 합니다. 프로토콜을 사용하여 코드의 재활용성과 확장성을 높일 수 있으며, 객체 간의 느슨한 결합을 유지할 수 있습니다.

프로토콜이란?

프로토콜은 메서드, 프로퍼티 등을 정의하고, 특정 작업이나 특정 데이터 타입을 수행하기 위한 요구사항을 정의합니다. 클래스, 구조체, 열거형 등에서 프로토콜을 채택(adopt)하여 프로토콜이 요구하는 기능을 구현할 수 있습니다. 이를 통해 코드의 재사용성을 높일 수 있습니다.

프로토콜은 protocol 키워드로 선언하며, 요구하는 메서드나 프로퍼티를 정의합니다.

예시로, Drawable 프로토콜을 정의해보겠습니다.

protocol Drawable {
    func draw()
}

위의 코드에서 Drawable 프로토콜은 draw 메서드를 요구합니다.

프로토콜의 채택과 준수

클래스, 구조체, 열거형은 프로토콜을 채택하여 프로토콜이 요구하는 기능을 구현할 수 있습니다. 이를 프로토콜 준수(Adopting a protocol) 라고 합니다.

아래는 Shape 클래스가 Drawable 프로토콜을 채택하여 draw 메서드를 구현한 예시입니다.

class Shape: Drawable {
    func draw() {
        // draw implementation
    }
}

위의 코드에서 Shape 클래스는 Drawable 프로토콜을 채택하고, Drawable 프로토콜이 요구하는 draw 메서드를 구현하였습니다.

프로토콜의 확장

프로토콜은 프로토콜 익스텐션(Protocol Extension)을 통해 기능을 확장하고 기본 구현을 제공할 수 있습니다. 이를 통해 프로토콜을 채택한 모든 타입에 대해 특정 기능을 제공할 수 있습니다.

예를 들어, Drawable 프로토콜에 기본적인 선 스타일과 색상을 설정하는 기능을 추가해보겠습니다.

extension Drawable {
    func setLineStyle() {
        // set line style implementation
    }
    
    func setColor() {
        // set color implementation
    }
}

위의 코드에서 Drawable 프로토콜을 확장하여 setLineStylesetColor 메서드를 기본 구현으로 제공하였습니다.

결론

프로토콜은 스위프트(Swift)에서 코드의 재사용성을 높이고 유연한 구조를 유지하는 데에 중요한 역할을 합니다. 프로토콜을 통해 객체의 인터페이스를 정의하고, 확장하여 기본 구현을 제공함으로써, 다양한 객체 간의 상호작용을 보다 쉽게 관리할 수 있습니다. 프로토콜은 객체지향 프로그래밍에서 핵심적인 개념 중 하나이며, 프로토콜을 올바르게 활용함으로써 안정적이고 유지보수가 쉬운 코드를 작성할 수 있습니다.

Apple - The Swift Programming Language - Protocols