Protocol Oriented Programming (POP)

상속이나 참조 semantics없이 다형성 구현

protocol Drawable { func draw() }

struct Point: Drawable {
    var x, y: Double
    func draw() { }
}

struct Line: Drawable {
    var x1, y1, x2, y2: Double
    func draw() {}
}

var drawables: [Drawable] = []
for d in drawables {
    d.draw()
}
class SharedLine: Drawable {
    var x1, y1, x2, y2: Double
    func draw() {
        // ...
    }
}

스크린샷 2023-02-22 오전 12.12.07.png

여전히 우리 코드는 다형성이 유지가 되고 있다. 하지만 이전과 비교했을 때 한가지 다른 점이 있다.

value type인 struct Line과 struct PointV-Table dispatch에 필요한 공통 상속 관계(common inheritance relationship)를 공유하지 않는다.

그렇다면 어떻게 Swift는 올바른 메서드로 dispatch할까??

Untitled

답은 **Protocol Witness Table(PWT)**이라고 하는 테이블 기반 메커니즘을 통해서 dispatch한다.

하지만 아직도 의문이 남는다..

1. 배열의 요소에서 테이블로 이동하려면 어떻게 해야 할까?

Untitled