특정 메서드,프로퍼티가 오버라이드되지 않도록 하기 위함.
-> 오버라이드하면 컴파일타임 에러가 발생
런타임 성능 향상
-> final 키워드로 인한 성능 비교를 위해서는 Static/Dynamic Dispatch에 대해 알아야한다.
✔️ Static Dispatch(Direct Call) : 컴파일 타임에 실제 호출할 함수를 결정하는 방식. struct,enum 등 값타입은 Static Dispatch를 하게 된다.
✔️ Dynamic Dispatch(Indirect Call) : 런타임에 호출될 함수 또는 변수를 결정하는 방식. vTable을 통한 간접 호출 방식. 함수 호출 시 어디에 있는 함수인지 확인하는 과정에서 오버헤드 발생.
클래스나 프로토콜은 Dynamic Dispatch를 사용하므로 성능 개선을 위해 final을 사용.
(* vTable이란? 클래스마다 가지고 있는 테이블.)