Swift/문법

Swift 프로토콜(Protocol)

지용빡 2022. 1. 8. 15:19
반응형
protocol
  • 특정 클래스와 관련없는 프로퍼티, 메서드 선언 집합
    • 함수(메서드) 정의는 없음
    • 기능이나 속성에 대한 설계도
    • 클래스(struct,enum)에서 채택(adopt)하여 메서드를 구현해야 한다.
  • 설계도 같은 역할
Protocol Oriented Programming(POP)
  • 프로토콜 단위로 묶어 표현하고, extension으로 기본적인 것을 구현(protocol default implementation)을 해서 단일 상속의 한계를 극복한다.
스위프트 상속과 프로토콜 채택
  • 부모 클래스는 하나만 가능하며 여러 개라면 나머지는 프로토콜이다.
  • 부모 클래스가 있으면 부모 클래스 다음에 표기 없으면 바로 표기 가능하다.
  • 클래스,구조체,열거형,extension에 프로토콜을 채택(adopt)할 수 있다.
  • 상속은 클래스만 가능하다.
class 클래스명: 부모클래스명, 프로토콜명1, 프로토콜명2 {} // 부모 클래스는 하나만 가능하며 여러 개라면 나머지는 프로토콜
// 부모가 있으면 부모 다음에 표기, 부모가 없으면 바로 표기 가능

class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {}
protocol 정의
protocol 프로토콜명 {
	프로퍼티명
    메서드 선언 // 메서드는 선언만 있다.
}

protocol 프로토콜명 : 다른프로토콜, 다른프로토콜2 {
	// 다중 상속도 가능하다.
}

protocol SomeProtocol {
    var x: Int {get set} // 읽기와 쓰기가 가능
    var y: Int { get } // 읽기 전용
    static var tx: Int { get set }
    static func typeMethod()
    func random() -> Double
}
protocol Runable {
    var x: Int {get set}
    func run()
}
class Man : Runable {   // 채택, adopt
    var x: Int = 1      //준수, conform
    func run() {print("달린다~")} //준수, conform
}
var man = Man()
man.run()	 // 달린다~
print(man.x) // 1
반응형