swift를 이용해서 개발하다보면 다음과 같은 코드를 한 번쯤 본 적이 있을 수 있을것입니다.

final class ViewController: UIViewController {
	...
}

이렇게 class앞에 final을 붙여주면 dynamic dispatchstatic dispatch로 바꿔줘서 런타임 최적화를 이끌어 내준다 라고 어디선가 한 번쯤은 들어보셨을 겁니다.

그렇게 이해하고 상속 가능성이 없는 class에 final을 붙여주는 습관을 가지고 있는 개발자들이 많이 계실겁니다. (저도 물론 그렇고요)

과연 final 키워드가 런타임 성능을 최적화 시켜준다는 것이 맞는 말일까?

의문을 갖게 된 계기

C++ 컴파일러는 devirtualization 이라는 기술을 포함하고있어 상속이 이루어지고있지 않은 class에 대해서 dynamic dispatchstatic dispatch 될 수 있도록 즉 final을 붙여주는 것과 같은 효과를 볼 수 있는 최적화를 해주는 기술도 있다는데 비교적 최근에 나온 Swift 언어 컴파일러에 이런 기능 하나 없을까?

에서 시작하게 된 의문점 입니다.

그런데 만약 Swift에도 devirtualization 기술이 포함되어 있다면 다양한 블로그에서 얘기하는

final은 런타임 최적화를 이끌어낸다

라는 말은 거짓이 되겠죠?