일단 스위프트에는 static dispatch와
dynamic dispatch가 있다.
static dispatch
위 처럼 drawAPoint 메소드가 Point안의 struct의 draw 메소드인 경우, 호출 타이밍이 너무 명확한 경우 컴파일러는 static하게 디스패치 해버린다. 이 경우 drawPoint 호출시 이중으로 스택에 불필요하게 세팅되었을 오버헤드가 사라진다.
dynamic dispatch
스위프트에서 다이나믹 메소드 디스패치가 사용되는 경우는 위처럼 다형성이 사용되는 경우일 수 있다. (다형성 객체의 메소드라고 무조건 다이나믹 디스패치는 아님; 호출 시점이 명확하면 컴파일러가 알아서 스태틱 디스패치로 하기도한다 함)
어쨌든, 위 경우를 보면 drawables가 다형성에 의한 배열이라 d.draw가 Point의 draw인지 Line의 draw인지 명확하게 알 수 가 없다.
실제 호출로 가면 위 처럼 힙에 있는 데이터의 type이 참조되어 그 타입이 가리키는 draw를 다시 참조하게 된다.
이것이 다이나믹 디스패치!
참고
https://developer.apple.com/videos/play/wwdc2016/416/
https://sihyungyou.github.io/iOS-method-dispatch/
'Advanced Swift' 카테고리의 다른 글
swift - 상속 또는 참조(reference)의 사용없이 polymorphism(다형성)을 지향 방법 (0) | 2022.12.20 |
---|---|
swift enum의 장점은? enum이란 무엇인가. (0) | 2022.12.20 |
swift string은 Stack, Heap 둘중 어디에 저장될까? (0) | 2022.12.19 |