Advanced Swift

swift - method dispatch : 메소드 디스패치

studying develop 2022. 12. 20. 05:07

일단 스위프트에는 static dispatch와

dynamic dispatch가 있다.

 

 

static dispatch

static dispatch

위 처럼 drawAPoint 메소드가 Point안의 struct의 draw 메소드인 경우, 호출 타이밍이 너무 명확한 경우 컴파일러는 static하게 디스패치 해버린다. 이 경우 drawPoint 호출시 이중으로 스택에 불필요하게 세팅되었을 오버헤드가 사라진다.

 

 

dynamic dispatch

dynamic

스위프트에서 다이나믹 메소드 디스패치가 사용되는 경우는 위처럼 다형성이 사용되는 경우일 수 있다. (다형성 객체의 메소드라고 무조건 다이나믹 디스패치는 아님; 호출 시점이 명확하면 컴파일러가 알아서 스태틱 디스패치로 하기도한다 함)

 

어쨌든, 위 경우를 보면 drawables가 다형성에 의한 배열이라 d.draw가 Point의 draw인지 Line의 draw인지 명확하게 알 수 가 없다.

 

 

실제 호출로 가면 위 처럼 힙에 있는 데이터의 type이 참조되어 그 타입이 가리키는 draw를 다시 참조하게 된다.

 

이것이 다이나믹 디스패치!


참고

https://developer.apple.com/videos/play/wwdc2016/416/

https://sihyungyou.github.io/iOS-method-dispatch/