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

2024. 8. 25. 22:51·Programing Langauge/swift
반응형

디스패치란

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은 프로토콜 요구 사항을 구현하는 방법을 기록.

 

 

반응형

'Programing Langauge > swift' 카테고리의 다른 글

디스패치 학습하기 (3) [ Value Type Dispatch, Protocol Dispatch ]  (1) 2024.08.25
디스패치 학습하기 (2) [ Reference Type Dispatch, final ]  (0) 2024.08.25
접근 제한자  (2) 2024.08.25
property 학습하기 (4) [ Property Observer ]  (0) 2024.08.25
property 학습하기 (3) [ Type Property ]  (0) 2024.08.25
'Programing Langauge/swift' 카테고리의 다른 글
  • 디스패치 학습하기 (3) [ Value Type Dispatch, Protocol Dispatch ]
  • 디스패치 학습하기 (2) [ Reference Type Dispatch, final ]
  • 접근 제한자
  • property 학습하기 (4) [ Property Observer ]
Hamp
Hamp
남들에게 보여주기 부끄러운 잡다한 글을 적어 나가는 자칭 기술 블로그입니다.
  • Hamp
    Hamp의 분리수거함
    Hamp
  • 전체
    오늘
    어제
    • 분류 전체보기 (339)
      • CS (30)
        • 객체지향 (2)
        • Network (7)
        • OS (6)
        • 자료구조 (1)
        • LiveStreaming (3)
        • 이미지 (1)
        • 잡다한 질문 정리 (0)
        • Hardware (2)
        • 이론 (6)
        • 컴퓨터 그래픽스 (0)
      • Firebase (3)
      • Programing Langauge (41)
        • swift (34)
        • python (6)
        • Kotlin (1)
      • iOS (134)
        • UIKit (37)
        • Combine (1)
        • SwiftUI (34)
        • Framework (7)
        • Swift Concurrency (22)
        • Tuist (6)
        • Setting (11)
        • Modularization (1)
        • Instruments (6)
      • PS (59)
        • 프로그래머스 (24)
        • 백준 (13)
        • LeetCode (19)
        • 알고리즘 (3)
      • Git (18)
        • 명령어 (4)
        • 이론 (2)
        • hooks (1)
        • config (2)
        • action (7)
      • Shell Script (2)
      • Linux (6)
        • 명령어 (5)
      • Spring (21)
        • 어노테이션 (6)
        • 튜토리얼 (14)
      • CI-CD (4)
      • Android (0)
        • Jetpack Compose (0)
      • AI (21)
        • 이론 (10)
        • MCP (1)
        • LangGraph (10)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    UIKit
    Spring
    백준
    lifecycle
    CS
    protocol
    투포인터
    dfs
    concurrency
    프로그래머스
    SwiftUI
    dp
    Swift
    dispatch
    GIT
    Tuist
    property
    boostcamp
    IOS
    AVFoundation
  • 최근 댓글

  • 최근 글

  • 반응형
  • hELLO· Designed By정상우.v4.10.0
Hamp
디스패치 학습하기 (1) [ 정의, 종류, vtable, witness table ]
상단으로

티스토리툴바