이때까지 명시적으로 상속을 할 필요가 없을 때 사용을 하고 있었지만, 성능적으로도 이점이 있다는 것을 알게 되었습니다.
성능적 이점이라... 어떻게 성능이 좋아진다는 말일까요? 성능상의 이점이 어떤 것인지 이해하기 위해 먼저 VTable
에 대해 알아보겠습니다.
VTable
은 Swift 및 다른 객체 지향 언어에서 클래스의 가상 함수를 저장하고, 해당 클래스의 인스턴스가 만들어질 때 메모리에 할당됩니다.
각 클래스는 해당하는 VTable을 가지며, VTable에는 해당 클래스의 가상 함수에 대한 포인터들이 저장됩니다.
클래스의 인스턴스가 생성될 때, 해당 클래스에 대한 포인터가 인스턴스의 메모리에 저장되며, 이를 통해 VTable에 접근하여 가상 함수를 호출할 수 있습니다.
VTable은 Swift의 다형성과 동적 디스패치의 기반을 제공하며, 객체 지향 프로그래밍에서 상속과 다형성을 구현하는 핵심 개념 중 하나입니다.
final
을 사용하면 상속이 불가하고 이 말인즉, 오버라이딩 할 수 없다.
따라서 동적 디스패치가 아닌 정적 디스패치로 동작하게 되면서 컴파일 타임에 호출할 메서드를 지정함으로써 성능상의 이점이 생깁니다.
좋은 글 감사합니다!