문법적 의미
더 이상의 상속을 불가능하게 한다.
- class 앞에 final이 붙게되면 다른 class에서 상속이 불가능해진다.
- 프로퍼티 메서드 등에 final이 붙게되면 재정의가 불가능해진다.
성능적 이점
런타임 시기에 성능적 이점을 가질 수 있다. 이를 얻게되는 방식은 Virtual Table을 먼저 알아야하며 Static Dispatch방식과 Dynamic Dispatch의 차이를 알아야한다.
https://clamp-coding.tistory.com/364
Direct(static) Dispatch
*요약: 컴파일 시점에 함수의 메모리주소를 코드영역에 삽입해버린다. 그럼 코드를 찾아갈 필요가 없으므로 가장 빠른 메서드 디스패치 방법이다.
Dynamic(Table) Dispatch
*요약:Virtual Table을 가지고있으며 재정의한 메서드는 재정의된 메서드의 함수 포인터를 갖고있으며, 재정의하지 않은 메서드는 상위 클래스의 메서드 주소를 갖고있다. 컴파일러가 런타임에 이 테이블을 사용하여 어떤 메서드를 호출할 지 결정한다.
결론
클래스에서 final키워드를 사용하면 클래스의 상속이 불가능해진다 이렇게되면 Direct Dispatch로 작동하기 때문에 속도가 그만큼 빨라진다. 추가적으로 final 키워드 뿐만 아니라 private 또한 다른 곳에서 override를 하지 않으면 컴파일러가 알아서 Direct Dispatch처럼 동작한다. 접근제한자의 역할 뿐만 아니라 성능 상 이점이 있으니 private를 습관화 하는게 좋을 것 같다.