swift를 이용해서 개발하다보면 다음과 같은 코드를 한 번쯤 본 적이 있을 수 있을것입니다.
final class ViewController: UIViewController {
...
}
이렇게 class앞에 final을 붙여주면 dynamic dispatch를 static dispatch로 바꿔줘서 런타임 최적화를 이끌어 내준다 라고 어디선가 한 번쯤은 들어보셨을 겁니다.
그렇게 이해하고 상속 가능성이 없는 class에 final을 붙여주는 습관을 가지고 있는 개발자들이 많이 계실겁니다. (저도 물론 그렇고요)
의문을 갖게 된 계기
C++ 컴파일러는 devirtualization 이라는 기술을 포함하고있어 상속이 이루어지고있지 않은 class에 대해서 dynamic dispatch를 static dispatch 될 수 있도록 즉 final을 붙여주는 것과 같은 효과를 볼 수 있는 최적화를 해주는 기술도 있다는데 비교적 최근에 나온 Swift 언어 컴파일러에 이런 기능 하나 없을까?
에서 시작하게 된 의문점 입니다.
그런데 만약 Swift에도 devirtualization 기술이 포함되어 있다면 다양한 블로그에서 얘기하는
라는 말은 거짓이 되겠죠?