[Swift] final 키워드, 왜 사용하는걸까?

Ryan (Geonhee) Son·2021년 5월 1일
1

오늘의 고민

목록 보기
7/10

타 프로그래밍 언어에서와 마찬가지로 Swift 또한 클래스의 상속을 지원합니다. 더 이상 해당 클래스에서 하위 클래스로의 전체 클래스 또는 일부 (메서드, 프로퍼티)가 상속 또는 상속에 따른 재정의가 될 필요가 없다고 판단한 경우 final 키워드를 각 요소 앞에 추가함으로써 상속을 방지할 수 있죠. The Swift Programming Language (Swift 5.4) - Inheritance에서는 아래와 같이 설명하고 있습니다.

Source: The Swift Programming Language (Swift 5.4) - Inheritance


final 키워드 적용이 성능에 미치는 영향

그럼 final 키워드 적용을 하면 성능에는 어떤 영향을 미칠까요? 비록 공식 문서에서는 성능과 관련된 사항을 언급하고 있지 않지만, 이 문서에서는 final로 선언된 요소들은 직접 호출하는 반면, 그렇지 않은 요소들은 vtable을 통해 간접 호출되어 직접 호출되는 경우보다 느리게 작동한다고 소개하고 있습니다.

vtable?

vtable은 가상 메서드 테이블을 이르는 것으로, virtual method table, virtual function table, virtual call table, dispatch table, vftable 등으로 부르기도 합니다. 메서드 오버라이딩에 따라 실행 시점에 어떤 메서드를 실행할지 결정하는 동적 디스패치를 지원하기 위해 프로그래밍 언어에서 사용하는 메커니즘이죠.

상기 언급한 바와 같이 오버라이딩한 메서드는 실행 시점에 어떤 메서드를 실행할지 결정하는 반면, final 키워드가 적용된 메서드는 컴파일 시점에 어떤 메서드를 실행할지 결정할 수 있으므로 성능 상 이점을 가진다고 할 수 있습니다.


참고자료

profile
합리적인 해법 찾기를 좋아합니다.

0개의 댓글