하루에 0.01%라도 성장하자

Develop/iOS

Swift 프로토콜 (Protocol)

뚠님 2019. 5. 10. 18:38
반응형

Swift

 

 

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