반응형
JAVA의 interface와 비슷한 역할인 Swift의 protocol 이다.
프로토콜 (protocol)
- 특정 역할을 수행하기 위한 메서드, 프로퍼티, 기타 요구사항을 정의함
- 구조체, 클래스, 열거형은 프로토콜을 채택(Adopted)해서 특정 기능을 수행하기 위한 프로토콜의 요구사항을 실제로 구현
- 타입에서 프로토콜의 요구사항을 충족시키려면 프로토콜이 제시하는 청사진의 기능을 모두 구현해야 한다.
프로토콜의 정의
protocol 프로토콜명 {
/* 정의부 */
}
프로토콜의 구현
- 프로토콜은 항상 var 키워드를 사용한다.
protocol Viewer {
//프로퍼티 요구
var viewer : String { get set };
var language : String { get };
//메소드 요구
func viewContent();
//이니셜라이저 요구
init(viewer:String, language:String);
}
struct Person : Viewer { // protocol 채택
var viewer : String;
let language : String;
func viewContent(){
print("시청중");
}
init(viewer:String, language:String){
self.viewer = viewer;
self.language = language;
}
}
Viewer protocol에 정의된 프로퍼티를 Person 구조체에서 구현하였다.
프로토콜의 상속
프로토콜은 상속이 가능하며 다중 상속이 가능하다.
protocol TempA{
func tempFuncA();
}
protocol TempB{
func tempFuncB();
}
protocol TempC : TempA, TempB{
func tempFuncC();
}
struct RealTemp : TempC { //TempC를 상속받았으므로 TempA, TempB에 정의된 메소드를 같이 구현해야 한다.
func tempFuncA(){
print("TempA 입니다.");
}
func tempFuncB(){
print("TempB 입니다.");
}
func tempFuncC(){
print("TempC 입니다.");
}
}
TempC는 TempA, TempB를 상속받았고 RealTemp는 TempC를 상속받았기 때문에 RealTemp는 세개의 메소드를 구현해야 사용 할 수 있다.
반응형
'Develop > iOS' 카테고리의 다른 글
Swift 오류 처리 ( Error ) (0) | 2019.05.13 |
---|---|
Swift 익스텐션 (0) | 2019.05.13 |
Swift assert 와 guard (0) | 2019.05.10 |
Swift nil병합 연산자 (0) | 2019.05.10 |
Swift 이니셜라이저와 디이니셜라이저 ( init and deinit ) (0) | 2019.05.10 |