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 상속 불가
프로퍼티, 메소드 override 불가
swift는 클래스마다 vTable를 가지고 있는데 클래스 내부의 함수들 중 어떠한 함수를 호출해야 할지 결정하는 테이블입니다.
함수가 호출되면 vTable에서 지금 class가 어떠한 함수를 호출해야 하는지 조회를 하고 해당 함수를 호출하는 방식입니다.
왜냐하면 함수가 오버라이딩 될 수 있는 가능성이 있기 때문에 상속받은 함수를 호출해야 할지, 오버라이딩 한 함수를 호출해야 할지 누군가는 알려주어야 하니까요!
이러한 과정이 런타임 때 이루어지며 이는 당연히 성능 측면에서 불리할 수 밖에 없습니다.
이름에서 알 수 있듯이 유동적으로 어떤 메소드와 프로퍼티를 호출할지 결정하는 방법입니다.
즉 런타임에 결정된다는 말이에요! (Swift는 기본적으로 해당 방법을 사용하고 있어요!)