디스패치 테이블

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

펄 (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. ISBN 0-201-79940-5