프로그램의 실행하는 과정에 대해서 중요한 개념인 Dispatch에 대해서 알아보도록 한다.
프로그램이 어떤 메서드를 호출할지를 결정하여 그것을 실행하는 과정을 의미한다. 즉 처리할 요청, 이벤트, 작업 등을 어떠한 함수를 통해서 수행을 할지를 결정하는 흐름이라고 볼 수 있다.
Static Dispatch(정적 디스패치)는 컴파일 시점에 어떠한 메서드를 호출할 것인지 결정하는 방법이다. 클래스(상속x, 추상클래스x, 인터페이스x)의 메서드는 컴파일 시점에 어떠한 메서드를 호출하고 사용할 지가 확실히 정해지므로 정적 디스패치라고 할 수 있다.
Dynamic Dispatch(동적 디스패치)는 런타임 시점에 어떠한 메서드를 호출할 것인지 결정하는 방법이다. 인터페이스나 추상클래스, 부모 클래스에 정의된 메서드를 재정의(override)하였을 때, 재정의한 메서드를 호출하게 된다면, 어떠한 메서드를 호출할 지는 런타임 시점에 결정된다. 이처럼 런타임 시점에 해당 인스턴스의 클래스에 따라서 불리는 메서드가 정해지는 방식을 동적 디스패치라고 할 수 있다.