본문으로 이동

디스패치 테이블

위키백과, 우리 모두의 백과사전.

컴퓨터 과학에서 디스패치 테이블 (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