[Swift] Final 키워드 왜 쓰는 걸까?
Swift에서의 MVVM에 대해 공부하며, 관련 예제 코드 및 남들이 MVVM을 적용한 프로젝트 코드들을 뜯고 맛보던 중 공통 되게 Class 앞에 final 을 붙인걸 보게 되는데...
문법적 의미
Swift language LANGUAGE GUIDE 중 상속 항목에서 final에 대한 설명이 나옵니다.
final 키워드를 메소드, 프로퍼티, 서브스크립트 앞에 사용함으로써, 오버라이드 되는 것을 막을 수 있다.
또한 class에서 상속이 불가능해진다.
라... 오호라?
오... 그렇구나. 문법적의미가 저렇구나... 근데 왜 수 많은 사람들이 굳이 왜 썻지? 라는 생각이 들었는데...
성능적 이점
애플 깃허브에 있는 Optimization 팁들 중 final 사용이 성능을 개선시켜준다는 내용이 있습니다.
Dynamic Dispatch의 성능상 문제점
Class의 경우 Dynamic Dispatch로 동작하는데, 상속의 가능성 때문이다!
런 타임 시점에 v Table을 통해 찾아야해서, 오버헤드가 발생한다.
*v Table은 동적 디스패치를 지원하기 위해 사용되는 매커니즘
결론
final 키워드는 오버라이드를 못하게 막는 키워드이다.오버라이드 하지 않으면? 컴파일러가 알아서 Static Dispatch 처럼 동작한다!고로 성능향상이 된다. final 뿐만 아니라, private도 습관화하자!