본문 바로가기
🍎iOS프로그래밍

Swift - [성능최적화]final 키워드를 알아보자(static dispatch, dynamic dispatch)

by 둥둥동동# 2023. 8. 7.
728x90

 

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

 

728x90

댓글