클래스와 프로토콜의 메서드가 실행되는 방식에 대한 이해
스위프트가 함수를 실행시키는 방법
- 컴파일 타임 : 소스코드가 기계어코드로 변환되는 시점
- Direct Dispatch | Static Dispatch
- 컴파일 시점에 코드 자체에 함수의 메모리 주소 삽입 또는 함수의 명령 코드를 해당 위치에 코드를 심음
- 가장 빠름 (0.0 - 2.13ns)
- 밸류 타입(구조체/열거형)에 사용
- 상속과 다형성의 장점을 누릴 수 없음
- Direct Dispatch | Static Dispatch
- 런타임 : 사용자에 의해 앱이 실행되는 시점
- Table Dispatch | Dynamic Dispatch
- 함수의 포인터를 배열 형태로 보관 후 실행
- 중간 (3.23ns)
- 클래스, 프로토콜 테이블에서 사용
- Witness Table : 프로토콜 테이블
- Virtual Table : 클래스 테이블
- Message Dispatch
- 주로 Objective-C 클래스에서 사용되던 방법, Objective-C 런타임에 의존
- 재정의하지 않은 경우 별도로 저장하지 않고 상위 클래스 상속구조를 모두 훑은 뒤 실행할 메서드를 결정
- 가장 느림 (5.82ns)
- Table Dispatch | Dynamic Dispatch
728x90
'FRONT-END > iOS' 카테고리의 다른 글
Swift의 self vs Self 이해하기 (0) | 2023.08.02 |
---|---|
Swift 중첩 타입 (Nested Types) (0) | 2023.08.02 |
Swift 프로토콜(Protocols) (0) | 2023.08.01 |
Swift 확장(Extensions) (0) | 2023.08.01 |
Swift 타입캐스팅(Type Casting) (0) | 2023.07.31 |
댓글