final
final
은
- 더 이상 상속이 필요없을 때, final 키워드를 사용하면된다.
- final 키워드가 붙은 상태에서 오버라이드를 할 경우 컴파일 에러가 발생한다.
final
을 통한 런타임 성능향상
- final 키워드를 붙이면
Dynamic Dispatch
이 아닌 Static Dispatch
를 사용해 컴파일 타임에 호출할 메서드임을 정해주므로 런타임 성능이 향상된다.
Dynamic Dispatch
- 런타임에, 호출될 함수를 결정한다.
- 하위 클래스가 메서드를 호출할 때, vTable을 참조하여 실제 호출할 함수를 결정한다.
- 이 과정이 런타임에 일어나기 때문에 성능상 손해를 가질 수 있다.
Static Dispatch
- 컴파일 타임에, 호출될 함수를 결정하고 런타임 때 그대로 실행한다.
- 컴파일 타임에 결정되기 때문에 성능상 이점을 가질 수 있다.