Concept Deep Dive

동적 바인딩 (Dynamic Binding)

컴파일 타임이 아닌 실행 시점에 실제 객체의 메서드 구현이 결정되는 방식.

인터랙티브 시각
참조 변수에 담을 객체 선택:
Animal ref = new Dog();ref.sound();class Dogsound() {print("멍멍")}class Catsound() {print("야옹")}class Cowsound() {print("음메")}dispatch> 멍멍

참조 타입은 항상 Animal이지만, 실행되는 sound()는 **실제 객체의 클래스**에 따라 달라진다.

위 시뮬레이터를 직접 조작하며 개념을 체화해 보자.

자세한 설명

`Animal a = new Dog(); a.sound();`에서 컴파일러는 `Animal.sound()`를 호출하라고만 적지만, JVM이 실행할 때 a가 실제로 가리키는 객체(Dog)의 `sound()`를 찾아 호출한다. 이것을 동적 바인딩 또는 가상 메서드 호출이라 한다. 자바는 모든 인스턴스 메서드가 기본적으로 동적 바인딩된다. 다만 `static`, `final`, `private` 메서드는 컴파일 타임에 확정되는 정적 바인딩이다.

이 개념이 등장하는 노드

딥다이브는 여기까지. 원래 학습 흐름으로 돌아갈까요?