[Swift] Method Dispatch - 정적 vs 동적 디스패치
Method Dispatch는 프로그램이 어떻게 해당 메소드를 실행할지 정하는 것이다.
Method Dispatch에는 Direct(Static 이라고 부르기도 한다.) / Dynamic 방식이 있으며, Dynamic Dispatch 방식에는 Table Dispatch / Message Dispatch 방식이 있다.
해당 Dispatch는 swift에만 있는 것이 아니라 모든언어에 있다. swift가 컴파일되고 해당 메소드르 부르는 방식에는 Direct, Table, Message 총 3가지가 있다고 보며 된다.
많은 언어들이 Direct나 Table Dispatch를 지원한다. Java는 Table dispatch를 기본적으로 사용한다. c++는 기본적으로 Direct dispatch를 이용한다. 하지만 virtual 키워드를 이용하여 table dispatch를 이용할 수 있다. Obj-C는 항상 Message Dispatch를 이용한다. 하지만 기본적으로 C처럼 Direct dispatch를 이용할수 있으며, Swift는 이 3가지를 다 지원한다. 이걸로인해 swift 개발자들에게 많은 혼란을 준다.
설명을 쓰고 싶지만, 아래 링크 2개로 해결이 될 것이라고 본다.
이해가 안되거나 궁금한 점은 댓글로 남겨주시면 답변드리도록 하겠습니다.
direct dispatch - direct of assem
table dispatch - override
message dispatch - runtime
https://www.rightpoint.com/rplabs/switch-method-dispatch-table
https://medium.com/@santu.chakraborty2009/method-dispatch-in-swift-47f4cc67ce9b