Method Dispatch
어떤 메서드(Static
, Dynamic
)호출할 것인가를 결정하고 실행하는 과정을 의미한다.
Static Dispatch
- 컴파일 타임에 실제 호출할 함수를 결정할
- 컴파일 시점에서 정하기 때문에
Dynamic Dispatch
보다 비교적 빠르다.
- 주로 값 타입(Value Type) 에서 사용하게 된다.
- 최적화 기법중 하나인 Method Inline을 사용할 수 있다.
Dynamic Dispatch
- Reference Semantics 에서의 다향성은 컴파일 시점에서 어떤 클레스의 메서드인지 알 수 없기에 런타임 시점에 호출할 함수를 결정한다.
- 런타임 시점에서 호출할 함수를 정하기 때문에
Static Dispatch
보다 느리다.
- Dynamic Dispatch 같은 경우 Virtual Dispatch Table 함수 포인터 배열을 유지하여 하위 클래스에 메서드를 호출 할때 마다 Virtual Dispatch Table에 참조하여 실제 호출할 함수를 결정하며 이러한 과정이 런타임에 결정 되기 때문에 추가적인 연산이 필요 하며, 시간적인 측면에서
Static Dispatch
보다 느릴 수밖에 없다.
class의 성능을 향상 시킬수 있는 방법
Inheritance
, Overriding
이 필요 없는 클래스 인 경우 final
키워드를 사용하여 Static Dispatch
로 동작 하도록 구현 한다.
- 접근 제어자 중 하나인
private
키워드를 사용하여 컴파일 시점에Overriding
가 없다는 것을 알려주며 Static Dispatch
로 동작 하게 한다.
📝 참고 사이트