본문 바로가기
iOS/Swift

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

by 최지철 2023. 8. 6.
728x90
반응형

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도 습관화하자!

728x90
반응형

'iOS > Swift' 카테고리의 다른 글

[Swift] Concurrency [1]  (1) 2023.10.23
[Swift] Optional  (1) 2023.10.17
[Swift] Protocol 프로토콜 [2]  (0) 2023.10.16
[Swift] Protocol 프로토콜 [1]  (0) 2023.09.01
[Swift] struct, class, enum  (0) 2023.08.31