메서드 호출 방식에 대한 용어로 Static Dispatch와 Dynamic Dispatch
이 개념은 성능, 최적화, 그리고 실행 방식에 큰 영향을 주기 때문에 꼭 이해하고 있어야 합니다.
final class, private 메서드에서 주로 사용됨struct Dog {
func bark() {
print("멍멍")
}
}
let dog = Dog()
dog.bark() // 정적 디스패치
@objc, dynamic 키워드 등)으로 작동할 수도 있음class Animal {
func speak() {
print("...")
}
}
class Cat: Animal {
override func speak() {
print("야옹")
}
}
let animal: Animal = Cat()
animal.speak() // 동적 디스패치
| 항목 | Static Dispatch | Dynamic Dispatch |
|---|---|---|
| 결정 시점 | 컴파일 타임 | 런타임 |
| 속도 | 빠름 | 느림 |
| 사용 대상 | struct, final class 등 | 일반 class (상속, 오버라이딩) |
| 다형성 | 불가능 | 가능 |
| 성능 최적화 | 유리 | 불리 |