final 키워드
class를 정의할 때 더이상 상속하지 않는다는 의미로 final 키워드를 붙일 수 있는데 키워드를 붙임으로서 얻을 수 있는 이점을 알아보자
final 키워드의 이점
우선 첫번째로 코드를 읽는 사람과 컴파일러에게 이 클래스가 더이상 상속되지 않도록 설계되었음을 명시할 수 있습니다.
두번째로 성능향상을 기대할 수 있습니다.
성능 향상을 이해하기 위해선 direct disptach와 dynamic dispatch에 대해 알아야 합니다
static dispatch는 컴파일 시점에 호출할 함수를 결정하는 방식으로 함수를 호출 과정이 간단하는 장점이 있습니다.
반면 dynamic dispatch는 런타임 중 호출함수를 결정하는 방식으로 vtable을 참조하는 과정을 거치게 됩니다. 앱이 실행될 때 vtable(method table, function table)을 통해 호출할 함수를 결정하기 때문에 static dispatch에 성능이 떨어질 수 밖에 없습니다.
(이 때 vtable이란 함수를 참조하고 있는 포인터 배열이며 dynamic dispatch에 의해 참조 됩니다.)
클래스는 상속,오버라이딩이 가능하기 때문에 dynamic dispatch방식을 사용하게 되는데 final로 추가 상속을 막게 되면 static dispatch방식으로 변경됩니다
final 뿐만이 아니라..
final class뿐만 아니라 value type인 enum, struct가 static dispatch방식으로 참조됩니다
참고
https://jcsoohwancho.github.io/2019-11-01-Swift%EC%9D%98-Dispatch-%EA%B7%9C%EC%B9%99/
https://github.com/apple/swift/blob/main/docs/OptimizationTips.rst#reducing-dynamic-dispatch
'🍎iOS프로그래밍' 카테고리의 다른 글
vision OS 맛보기 - Xcode에서 vision OS 앱 체험하기 (0) | 2023.09.01 |
---|---|
iOS- 네트워크로 데이터를 불러올때 data(contentsOf:)메서드를 사용하면 안되는 이유 (0) | 2023.08.21 |
Swift - [성능최적화]를 해보자 (dynamic dispatch편) (0) | 2023.08.08 |
Xcode - 오류, Package.resolved file is corrupted or malformed 해결하기 (0) | 2023.06.02 |
댓글