본문으로 바로가기

[Swift] 프로토콜 (3/4) 프로토콜의 상속

category Swift/문법 2022. 4. 16. 18:45

프로토콜의 상속

- A프로토콜, B프로토콜이 있고 B프로토콜이 A프로토콜을 상속할시

- B프로토콜을 채택하면 A + B프로토콜의 요구사항을 모두 구현해야 한다

- 프로토콜끼리는 다중상속이 가능하다 (단순히 요구사항의 나열)

protocol SomeProtocol {
    func doSomething()
}

protocol SomeProtocol2 {
    func doSomething2()
}

protocol SomeProtocol3: SomeProtocol, SomeProtocol2 {
    func doSomething3()
}
// SomeProtocol3 채택시 상속된 프로토콜의 모든 요구사항을 구현해야함


class AClass: SomeProtocol3 {
    func doSomething() { // SomeProtocol의 요구사항
        print("doSomething")
    }
    
    func doSomething2() { // SomeProtocol2의 요구사항
        print("doSomething2")
    }
    
    func doSomething3() { // SomeProtocol3의 요구사항
        print("doSomething3")
    }
}

클래스 전용 프로토콜

- 프로토콜에 AnyObject 프로토콜 상속시 클래스에서만 채택가능한 클래스 전용 프로토콜이 된다

protocol SomeProtocol: AnyObject {
    
}

class AClass: SomeProtocol {
    
}

/*  구조체나 열거형에서는 AnyObject를 상속한 프로토콜 채택 불가능
struct AStruct: SomeProtocol {
    
}
*/

프로토콜의 합성

- 프로토콜을 &으로 연결해서 프로토콜 여러개랄 병합해서 타입으로 사용가능

protocol SomeProtocol {
    
}

protocol SomeProtocol2 {
    
}

class AClass: SomeProtocol, SomeProtocol2 { }
class BClass: SomeProtocol2 { }

let aClass = AClass()
let bClass = BClass()

//프로토콜을 &으로 연결해서 프로토콜 여러개랄 병합해서 타입으로 사용가능
let some: SomeProtocol & SomeProtocol2 = aClass
// let some: SomeProtocol & SomeProtocol2 = BClass (SomeProtocol2밖에 채택이 안됐으므로 불가능)