clamp
Clamp
clamp
글쓰기 관리
전체 방문자
오늘
어제
  • 분류 전체보기 (509)
    • IOS (85)
    • SwiftUI+TCA+Combine (9)
    • RxSwift + MVVM (56)
    • Clean Architecture (12)
    • SWIFT (56)
    • iOS - TDD (2)
    • 디자인패턴 (4)
    • CS (56)
      • 알고리즘 (29)
      • 운영체제 (15)
      • 자료구조 (2)
      • 네트워킹 (4)
      • 기타 (6)
    • 회고 (0)
    • Firebase (18)
    • SwiftUI (10)
    • iOS - UIKit (11)
    • iOS - 오픈소스 (6)
    • 코딩테스트 (166)
      • 프로그래머스 (164)
    • 정보처리기사 (14)
    • GitHub (2)
글쓰기 / 관리자

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • uikit
  • Swift
  • ㅅ
  • Q

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
clamp

Clamp

SWIFT

[Swift] Final

2023. 3. 23. 17:58

문법적 의미

더 이상의 상속을 불가능하게 한다.
  • class 앞에 final이 붙게되면 다른 class에서 상속이 불가능해진다.
  • 프로퍼티 메서드 등에 final이 붙게되면 재정의가 불가능해진다.

 

성능적 이점

런타임 시기에 성능적 이점을 가질 수 있다. 이를 얻게되는 방식은 Virtual Table을 먼저 알아야하며 Static Dispatch방식과 Dynamic Dispatch의 차이를 알아야한다.

https://clamp-coding.tistory.com/364

 

[Swift]. Method Dispatch

Method Dispatch 실제로 Method는 CPU에대한 명령어이며, 실제론 코드 영역에만 존재한다. 그렇기 때문에 코드 영역에 있는 메서드를 실행시키려면 메서드 주소가 필요하다. 그런데 그 메서드 주소를

clamp-coding.tistory.com

 

 

Direct(static) Dispatch

*요약: 컴파일 시점에 함수의 메모리주소를 코드영역에 삽입해버린다. 그럼 코드를 찾아갈 필요가 없으므로 가장 빠른 메서드 디스패치 방법이다.

 

 

Dynamic(Table) Dispatch

*요약:Virtual Table을 가지고있으며 재정의한 메서드는 재정의된 메서드의 함수 포인터를 갖고있으며, 재정의하지 않은 메서드는 상위 클래스의 메서드 주소를 갖고있다. 컴파일러가 런타임에 이 테이블을 사용하여 어떤 메서드를 호출할 지 결정한다.

 

 

결론

클래스에서 final키워드를 사용하면 클래스의 상속이 불가능해진다 이렇게되면 Direct Dispatch로 작동하기 때문에 속도가 그만큼 빨라진다. 추가적으로 final 키워드 뿐만 아니라 private 또한 다른 곳에서 override를 하지 않으면 컴파일러가 알아서 Direct Dispatch처럼 동작한다. 접근제한자의 역할 뿐만 아니라 성능 상 이점이 있으니 private를 습관화 하는게 좋을 것 같다.

 

저작자표시 비영리 동일조건 (새창열림)
    'SWIFT' 카테고리의 다른 글
    • [Swift] - UUID 랜덤 고유값 문자 생성
    • [Swift] 확장(extension)
    • [Swift] @propertyWrapper(프로퍼티 래퍼)
    • [Swift] Properties(속성)
    clamp
    clamp
    주니어 iOS개발자의 발악!!!!!!!

    티스토리툴바