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
반응형