바인딩과 final

앞면

늦은/이른 바인딩의 정의는? 성능은 어느 쪽이 왜 유리한가? Java에서 이른 바인딩을 가능하게 만드는 방법은?

뒷면

  • 이른 바인딩: 호출할 함수를 컴파일 중 결정 — 호출문이 jmp 명령어로 교체되고 함수 주소가 코드에 박힘
  • 늦은 바인딩: 실행되는 구현을 실행 중 실체 기준으로 결정 — 다형성(오버라이딩된 메서드 호출)의 구현 방식
  • 성능은 이른 바인딩 유리 — 컴파일 중에는 최적화할 시간이 충분하지만 실행 중에는 절대적으로 부족
  • Java는 기본이 가상(오버라이딩 가능) — 메서드/클래스에 final을 붙여 오버라이딩을 차단하면 컴파일러가 이른 바인딩(최적화) 가능

출처: https://pocu-site.pages.dev/pocu-note/COMP2500/008-polymorphism/008-010-binding-performance-and-preventing-overriding/