본문 바로가기
2022_iOS 앱 개발자 워크숍/1, Swift 문법 복습

Swift : Protocol

by 황민우 2022. 1. 8.

정의

 = 특정 클래스와 관련없는 프로퍼티, 메서드 선언 집합
    - 함수 정의는 없다.
    - 기능이나 속성에 대한 설계도
    - 클래스(구조체, 열거형)에서 채택(adopt)하여 메서드를 구현

형식

class 자식:부모 {

}

 - 부모 클래스는 하나만 상속, 뒤에오는 나머지는 프로토콜
 - 클래스, 구조체, 열거형, extension에 프로토콜을 채택 할 수 있다 ( 상속은 클래스만 가능 )

     ex) class 클래스명 : 부모명, 프로토콜1, 프로토콜2 {  }

 - 부모가 없으면 바로 프로토콜 채택 가능

     ex) calss 클래스명 : 프로토콜1, 프로토콜2 {  } 

프로토콜 정의

protocol 프로토콜명{
	//프로퍼티명
	//메서드 선언//메서드는 선언만 존재
}
protocol 프로토콜명 : 프로토콜1, 프로토콜2{
	// 프로토콜은 다중 상속도 지원
}

 

프로토콜 예제 1

 - 채택 후 클래스 내에서 프로토콜에 대한 내용을 정의( 준수, Conform )하지 않으면 오류가 발생한다. 

protocol Runnable{
    var x : Int {get set}
    func run()
}
class Man : Runnable{  // 프로토콜 채택
    var x : Int = 8 // 반드시 정의 해줘야함.
    func run(){     // 반드시 정의 해줘야함.
        print("달려!")
    }         
}
let hwang = Man()
print(hwang.x)
hwang.run()

실행결과
// 8
// 달려!

 

프로토콜 예제 2

protocol B {
    func bb(x:Int) -> Int
}
class C{
    
}
class A : C, B{
    func bb(x:Int) -> Int {
        return x*2
    }
}
let a : A = A()
print(a.bb(x:2))


실행결과
// 4

강의 출처 : https://www.youtube.com/channel/UCM8wseo6DkA-D7yGlCrcrwA

댓글