class를 작성할 때 아래 code1 처럼 final 키워드를 사용합니다.

final을 선언하면 상속이 불가능해지기 때문입니다.

상속 방지외에는 어떤 의미가 있을까요.

final class RankingFeatureSectionView: UIView {
    
    private lazy var titleLabel: UILabel = {
        let label = UILabel()
        label.font = .systemFont(ofSize: 18.0, weight: .black)
        label.text = "iPhone이 처음이라면"
        return label
    }()
...

문법적 의미

class 상속 불가

Untitled

프로퍼티, 메소드 override 불가

Untitled

성능적 이점

vTable

swift는 클래스마다 vTable를 가지고 있는데 클래스 내부의 함수들 중 어떠한 함수를 호출해야 할지 결정하는 테이블입니다.

함수가 호출되면 vTable에서 지금 class가 어떠한 함수를 호출해야 하는지 조회를 하고 해당 함수를 호출하는 방식입니다.

왜냐하면 함수가 오버라이딩 될 수 있는 가능성이 있기 때문에 상속받은 함수를 호출해야 할지, 오버라이딩 한 함수를 호출해야 할지 누군가는 알려주어야 하니까요!

이러한 과정이 런타임 때 이루어지며 이는 당연히 성능 측면에서 불리할 수 밖에 없습니다.

Dynamic Dispatch

이름에서 알 수 있듯이 유동적으로 어떤 메소드와 프로퍼티를 호출할지 결정하는 방법입니다.

즉 런타임에 결정된다는 말이에요! (Swift는 기본적으로 해당 방법을 사용하고 있어요!)

Static Dispatch