디스패치란
Dispatch란 어떤 메서드를 호출한 것인지를 결정하여 그것을 실행시키는 메커니즘입니다.
Dispatch는 2가지 종류가 있는데 구분하는 기준은 내가 호출한 함수를 컴파일 타임에 결정하냐
런타임에 결정하냐에 따른 방식으로 나뉩니다.
종류
Static Dispatch (Direct Call) | Dynamic Dispatch (Indirect Call) | |
호출 함수 결정 시기 | 컴파일 타임에 결정 | 런타임에 호출될 함수 결정 |
속도 | 매우 빠름 | static Dispatch 보다 느림 |
사용 타입 | 값 타임에 사용 | 래퍼런스 타입 |
vTable 사용 | X | O |
vTable vs Witness Table
디스패쳐 설명에 들어가기 전에 알고가면 좋은 Table 두개가 있다.
각 Table의 역할을 보고 추후 Dispatch 설명 관련에 등장할 때 당황하지 말자.
vTable(Virtual Table) | Witness Table | |
사용 목적 | 클래스에서 메소드 호출을 동적으로 하기위해 사용 | 프로토콜을 준수하는 타입이 요구 사항을 어떻게 구현하는지 기록 |
구조 | 각 클래스는 vtable을 갖고 있으며, vtable은 오버라이드된 메소드들에 대한 포인터를 포함 |
프로토콜의 요구 사항을 구현하는 방법을 witness Table에 기록 |
동작 방식 | 메소드가 호출될 때, 객체의 vtable을 참조하여 런타임에 메소드를 결정. |
메소드가 호출될 때 구현체 타입의 witness Table을 참조하여 결정 |
공통점 | 둘다 dynamic dispatch를 지원하여 런타임 중 메소드 호출을 동적으로 결정 호출할 메소드의 실제 주소를 테이블을 통해 찾음 |
|
차이점 | vtable은 상속과 메소드 오버라이딩을 지원하며, Witness Table은 프로토콜 요구 사항을 구현하는 방법을 기록. |
'프로그래밍언어 > swift' 카테고리의 다른 글
디스패치 학습하기 (3) [ Value Type Dispatch, Protocol Dispatch ] (0) | 2024.08.25 |
---|---|
디스패치 학습하기 (2) [ Reference Type Dispatch, final ] (0) | 2024.08.25 |
접근 제한자 (0) | 2024.08.25 |
property 학습하기 (4) [ Property Observer ] (0) | 2024.08.25 |
property 학습하기 (3) [ Type Property ] (0) | 2024.08.25 |