Dispatch

hankyulee·2022년 9월 27일
0

인터뷰

목록 보기
9/12

Dispatch란 메시지에 따라서 어떤 메서드를 호출할 것인지를 결정하여, 그것을 실행하는 메커니즘이다
많은 객체 지향 언어들이 메소드와 프로퍼티들을 오버라이드 할 수 있도록 허용
Static Dispatch - 컴파일 타임
Dynamic - 런타임

Static Dispatch는 컴파일 시점에 함수를 결정해서 성능상 이점이 있음
우리가 자주 사용하는 Class는 Dynamic Dispatch를 사용

근데 그 이유가 상속 즉, "오버라이딩"의 가능성이 있기 때문임 - 함수를 오버라이딩하지 않으면 발생X

class -> subclass에서는 override가 안되므로 dynamic dispatch X

extension에서 만든 function은 override안됨 -> static dispatch

value도 상속 안되므로 static dispatch
protocol은 기본적으로 dynamic dispatch
protocol extension은 static dispatch
protocol extenison에서만 선언된 메소드는 static.

한 클래스 내에서도 final 키워드가 붙으면 static, 안붙으면 dynamic dispatch로.

또한 한 클래스내에서도 private 붙은 것은 static, 안붙으면 dynamic. 그러나 private이더라도 같은 클래스내에서 override되면 dynamic
해결 -> Private, final, WMO(전체 모듈을 하나씩 보는것이 아니라 전체를 확인하면서 컴파일 하여 어디가 상속받아 오버라이드 하는지 확인 해서 없으면 내부적으로 final붙여서 Static Dispatch로 동작하게함) 그러나 기본 접근 제어자가 internal이기 때문에 가능한것이고, public, open 키워드를 붙이면 외부 모듈에서 접근 가능하기때문에 Dynamic Dispath로 동작.

출처: https://babbab2.tistory.com/143

0개의 댓글