Mobile App/iOS

[Swift] Method Dispatch - 정적 vs 동적 디스패치

bugtype 2020. 1. 12. 13:23

 

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