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