iOS/Swift

[Swift] Final 키워드 왜 쓰는 걸까?

최지철 2023. 8. 6. 22:56
반응형

Swift에서의 MVVM에 대해 공부하며, 관련 예제 코드 및 남들이 MVVM을 적용한 프로젝트 코드들을 뜯고 맛보던 중 공통 되게 Class 앞에 final 을 붙인걸 보게 되는데...

내 이름은 코난 탐정이죠

문법적 의미

Swift language LANGUAGE GUIDE 중 상속 항목에서 final에 대한 설명이 나옵니다.

final 키워드를 메소드, 프로퍼티, 서브스크립트 앞에 사용함으로써, 오버라이드 되는 것을 막을 수 있다.

 

또한 class에서 상속이 불가능해진다.

 

라... 오호라?

 

근데 굳이 써야할까..?

 오... 그렇구나. 문법적의미가 저렇구나... 근데 왜 수 많은 사람들이 굳이 왜 썻지? 라는 생각이 들었는데...

 

성능적 이점

애플 깃허브에 있는 Optimization 팁들 중 final 사용이 성능을 개선시켜준다는 내용이 있습니다.

https://github.com/apple/swift/blob/main/docs/OptimizationTips.rst#advice-use-final-when-you-know-the-declaration-does-not-need-to-be-overridden

Dynamic Dispatch의 성능상 문제점

Class의 경우 Dynamic Dispatch로 동작하는데, 상속의 가능성 때문이다! 

런 타임 시점에 v Table을 통해 찾아야해서, 오버헤드가 발생한다.

 *v Table은 동적 디스패치를 지원하기 위해 사용되는 매커니즘

 

결론

final 키워드는 오버라이드를 못하게 막는 키워드이다.오버라이드 하지 않으면? 컴파일러가 알아서 Static Dispatch 처럼 동작한다!고로 성능향상이 된다. final 뿐만 아니라, private도 습관화하자!

반응형