본문 바로가기

개발

Swift 프로토콜 (Protocols)

728x90

Swift 프로토콜 (Swift Protocols)

Swift 프로토콜은 객체 지향 프로그래밍의 핵심 개념인 인터페이스를 정의하는 강력한 기능입니다. 프로토콜은 클래스, 구조체, 열거형이 구현해야 하는 메서드, 프로퍼티, 기타 요구 사항을 명시하며, 코드의 모듈성, 재사용성, 유연성을 높이는 데 도움을 줍니다.

1. 기본 개념

  • 블루프린트 역할: 프로토콜은 마치 건축 설계도처럼 클래스, 구조체, 열거형이 구현해야 할 요소들을 정의하는 역할을 합니다.
  • 공통 기능 정의: 서로 다른 타입들이 공통적으로 구현해야 하는 기능들을 프로토콜에 정의하여 코드를 일관되게 만들 수 있습니다.
  • 유연한 구현: 프로토콜은 구체적인 구현을 제공하지 않고 인터페이스만을 정의하기 때문에, 다양한 타입들이 프로토콜을 자체 방식으로 구현할 수 있습니다.
  • 다중 상속 지원: Swift는 단일 상속 외에도 프로토콜을 통해 다중 상속을 지원합니다. 즉, 하나의 클래스, 구조체, 열거형은 여러 개의 프로토콜을 동시에 채택할 수 있습니다.

2. 구조

protocol SomeProtocol {

    // 프로토콜에서 정의하는 메서드, 프로퍼티, 기타 요구 사항

}

 

  • protocol: 프로토콜 키워드입니다.
  • SomeProtocol: 프로토콜 이름입니다.
  • { }: 프로토콜 블록을 감싸는 블록입니다.
  • // 프로토콜에서 정의하는 메서드, 프로퍼티, 기타 요구 사항: 프로토콜을 채택하는 타입들이 구현해야 하는 요소들을 정의합니다.

3. 활용 사례

  • 데이터 처리: 데이터 구조의 공통적인 기능을 정의하는 데 사용됩니다. 예를 들어, Equatable 프로토콜은 두 값을 비교하여 동일한지 판별하는 기능을 정의합니다.
  • 네트워킹: 네트워킹 작업을 수행하는 클래스, 구조체들의 공통적인 인터페이스를 정의하는 데 사용됩니다.
  • UI 디자인: UI 요소들의 공통적인 기능을 정의하는 데 사용됩니다.
  • 알고리즘: 알고리즘을 구현하는 데 필요한 공통적인 기능을 정의하는 데 사용됩니다.
  • 확장성: 기존 코드를 변경하지 않고도 새로운 기능을 추가할 수 있도록 합니다.

4. 예시

protocol Shape {

    var area: Double { get }

    func getPerimeter() -> Double

}



struct Circle: Shape {

    let radius: Double



    var area: Double {

        get {

            return .pi * radius * radius

        }

    }



    func getPerimeter() -> Double {

        return 2 * .pi * radius

    }

}



struct Rectangle: Shape {

    let width: Double

    let height: Double



    var area: Double {

        get {

            return width * height

        }

    }



    func getPerimeter() -> Double {

        return 2 * (width + height)

    }

}



let circle = Circle(radius: 10)

let rectangle = Rectangle(width: 20, height: 5)



print("원 넓이: \(circle.area)")

print("원 둘레: \(circle.getPerimeter())")

print("사각형 넓이: \(rectangle.area)")

print("사각형 둘레: \(rectangle.getPerimeter())")

 

5. 참고 자료

 

'개발' 카테고리의 다른 글

Swfit 불투명한 타입 (Opaque Types)  (0) 2024.07.05
Swfit 제너릭 (Generics)  (0) 2024.07.05
Swift 확장 (Extensions)  (0) 2024.07.05
Swift 중첩된 타입 (Nested Types)  (0) 2024.07.05
swift 타입 캐스팅 (Type Casting)  (0) 2024.07.05