Polymorphism

정적 바인딩과 동적 바인딩 비교

바인딩은 어떤 메서드를 실행할지 결정하는 과정이다. 컴파일 시점에 정하면 정적, 실행 시 실제 객체로 고르면 동적이다.

호출 대상이 결정되는 시점

binding time

정적 바인딩

컴파일러가 선언 타입만 보고 호출 대상을 고른다.

동적 바인딩

실행 중 실제 객체 타입을 보고 오버라이딩 메서드를 고른다.

참조 타입

변수 타입은 사용할 수 있는 메서드 범위를 제한한다.

실제 객체

오버라이딩된 구현은 객체의 실제 타입이 결정한다.

referencemethod call정적 점검runtime dispatchoverride
선택 시점 해석

다형성은 이름이 같은 메서드가 아니라 선택 시점의 문제다. 선언 타입과 실제 타입을 분리해서 읽어야 한다.