디스패치 테이블

컴퓨터 과학에서 디스패치 테이블 ()은 메서드들을 가리키는 포인터들이나 메소드들의 테이블이다. 이런 테이블을 사용하는 것은 객체 지향 프로그래밍에서 늦은 바인딩을 구현하는 기본적인 기술이다.

 펄 (Perl) 구현 
아래는 펄을 통해 디스패치 테이블을 구현하였다.  #define the table using one anonymous code-ref and one named code-ref
 my %dispatch = (
   "-h" => sub {  return "hello\n"; },
   "-g" => \&say_goodbye
 );

 sub say_goodbye {
   return "goodbye\n";
 }

 #fetch the code ref from the table, and invoke it
 my $sub = $dispatch{$ARGV[0]};
 print $sub ? $sub->() : "unknown argument\n";이 Perl 프로그램을 perl greet -h 명령어로 돌리면 "hello"를 보여주고, perl greet -g 명령어는 "goodbye"를 보여준다.

 자바스크립트 구현 
아래는 자바스크립트로 구현한 디스패치 테이블이다.var thingsWeCanDo = {
    doThisThing      : function() { /* behavior */ },
    doThatThing      : function() { /* behavior */ },
    doThisOtherThing : function() { /* behavior */ },
    default          : function() { /* behavior */ }
};

var doSomething = function(doWhat) {
    var thingToDo = thingsWeCanDo.hasOwnProperty(doWhat) ? doWhat : "default"
    thingsWeCanDo[thingToDo]();
}

 가상 메소드 테이블 
가상 메소드를 지원하는 객체 지향 프로그래밍 언어에서 컴파일러는 자동으로 가상 메서드를 포함하는 클래스의 각 객체마다 디스패치 테이블을 생성한다. 이 테이블은 가상 메소드 테이블(또는 vtable)이라고 불리며, 모든 가상 메서드는 이 vtable을 통해 보내진다.

 같이 보기 
 분기 테이블

 각주 
 Diomidis Spinellis (2003). Code Reading: The Open Source Perspective. Boston, MA: Addison-Wesley. 

분류:메소드 (컴퓨터 프로그래밍)