Swift에서 프로토콜은 다른 프로토콜을 상속할 수 있습니다.
클래스와는 다르게 프로토콜은 다중 상속을 허용하고 있습니다.
하위 프로토콜을 채택하면, 상위 프로토콜의 멤버까지 정의해야 합니다.
✅ 일반적인 프로토콜의 상속
protocol A{ func a() } protocol B{ func b() } protocol AB: A, B{ //프로토콜 A, B 상속 // func a() 상속 받음 // func b() 상속 받음 func ab() } class XXX: AB{ func a(){ print("a") } func b(){ print("b") } func ab() { print("ab") } }
✅ 상속을 활용한 클래스 전용 프로토콜
- AnyObject는 프로토콜로 만들어진 타입이기 때문에 프로토콜 상속이 가능합니다.
- AnyObject를 상속받은 프로토콜을 채택하여 사용할 때는 AnyObject의 요구사항을 충족해야 하므로 클래스만 사용할 수 있습니다. (AnyObject는 클래스 타입만 표현 가능한 타입입니다.)
protocol A: AnyObject{ // AnyObject는 프로토콜이기 때문에 상속이 가능하다. func a() } class AAA: A{ func a() { print("a") } }
프로토콜의 합성은 두 개 이상의 프로토콜을 하나의 프로토콜처럼 사용하는 문법입니다.
프로토콜을 합성할 때는 & 키워드를 사용하여 합성합니다.
합성된 프로토콜은 타입처럼 사용할 수 있습니다.
✅ 프로토콜의 합성
protocol A{ func a() } protocol B{ func b() } protocol C{ func c() } class ABC: A & B & C{ //프로토콜 A, B, C 하나로 합성 func a() { print("a") } func b() { print("b") } func c() { print("c") } } var kim: A & B & C = ABC() // 합성한 프로토콜은 타입처럼 사용 가능하다.
참고자료: 앨런 Swift문법 마스터 스쿨