프로토콜(Protocol)의 상속(Inheritance) / 합성(Composition)

썹스·2022년 10월 29일
0

Swift 문법

목록 보기
28/68

📌 프로토콜(Protocol)의 상속(Inheritance)

  • 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)의 합성(Composition)

  • 프로토콜의 합성은 두 개 이상의 프로토콜을 하나의 프로토콜처럼 사용하는 문법입니다.

  • 프로토콜을 합성할 때는 & 키워드를 사용하여 합성합니다.

  • 합성된 프로토콜은 타입처럼 사용할 수 있습니다.

✅ 프로토콜의 합성

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()    // 합성한 프로토콜은 타입처럼 사용 가능하다.


Reference

참고자료: 앨런 Swift문법 마스터 스쿨

profile
응애 나 코린이(비트코인X 코딩O)

0개의 댓글