Programing Langauge/swift

디스패치 학습하기 (1) [ 정의, 종류, vtable, witness table ]

Hamp 2024. 8. 25. 22:51
반응형

디스패치란

Dispatch란 어떤 메서드를 호출한 것인지를 결정하여 그것을 실행시키는 메커니즘입니다.

Dispatch는 2가지 종류가 있는데 구분하는 기준은 내가 호출한 함수를 컴파일 타임에 결정하냐
런타임에 결정하냐에 따른 방식으로 나뉩니다. 

 

종류

  Static Dispatch (Direct Call) Dynamic Dispatch (Indirect Call)
호출 함수 결정 시기 컴파일 타임에 결정 런타임에 호출될 함수 결정
속도 매우 빠름 static Dispatch 보다 느림
사용 타입 값 타임에 사용 래퍼런스 타입
vTable 사용 X O

 

vTable vs Witness Table

디스패쳐 설명에 들어가기 전에 알고가면 좋은 Table 두개가 있다.

각 Table의 역할을 보고 추후 Dispatch 설명 관련에 등장할 때 당황하지 말자. 

왼쪽 vtable, 오른쪽 witness table

  vTable(Virtual Table) Witness Table
사용 목적 클래스에서 메소드 호출을 동적으로 하기위해 사용 프로토콜을 준수하는 타입이
요구 사항을 어떻게 구현하는지 기록
구조 각 클래스는 vtable을 갖고 있으며, vtable은
오버라이드된 메소드들에 대한 포인터를 포함
프로토콜의 요구 사항을 구현하는 방법을
witness Table에 기록
동작 방식 메소드가 호출될 때, 객체의 vtable을 참조하여 런타임에
메소드를 결정.
메소드가 호출될 때 구현체 타입의
witness Table을 참조하여 결정
공통점 둘다 dynamic dispatch를 지원하여 런타임 중 메소드 호출을 동적으로 결정
호출할 메소드의 실제 주소를 테이블을 통해 찾음
차이점 vtable은 상속과 메소드 오버라이딩을 지원하며, Witness Table은 프로토콜 요구 사항을 구현하는 방법을 기록.

 

 

반응형