본문 바로가기
Category/정보처리기사

동적 바인딩(Dynamic Binding)이란?

by Corinee 2024. 10. 8.
728x90
반응형

동적 바인딩의 핵심 개념

  • 동적 바인딩(Dynamic Binding)이란 런타임객체의 실제 타입에 따라 메서드가 호출되는 방식입니다.
  • 부모 클래스에서 메서드를 호출할 때, 객체가 자식 클래스의 인스턴스일 경우, 자식 클래스에서 오버라이딩된 메서드가 호출됩니다.

왜 부모 클래스에서 자식 클래스의 메서드가 호출되는가?

  1. 상속을 통해 부모와 자식 클래스가 연결됩니다.
  2. 자식 클래스에서 부모 클래스의 메서드를 오버라이딩하면, 자식 클래스의 메서드가 부모 클래스의 동일한 메서드를 덮어쓰게 됩니다.
  3. 동적 바인딩실제 객체의 타입에 따라 메서드를 호출하는 방식이므로, 부모 클래스의 참조 변수를 사용해 메서드를 호출하더라도, 실제 객체가 자식 클래스라면 자식 클래스의 메서드가 호출됩니다.

예제 코드와 실행 흐름

class A {
    public void paint() {
        System.out.print("A");
        draw();  // 동적 바인딩에 의해 자식 클래스의 draw()가 호출될 수 있음
    }
    
    public void draw() {
        System.out.print("B");
    }
}

class B extends A {
    @Override
    public void draw() {
        System.out.print("D");
    }
}

public class Main {
    public static void main(String[] args) {
        A obj = new B();  // 부모 타입이지만 실제 객체는 B
        obj.paint();  // 자식 클래스 B의 draw()가 호출됨
    }
}

실행 흐름

  1. A obj = new B();
    • obj는 A 타입의 참조 변수를 가지고 있지만, 실제로는 B 클래스의 객체를 가리키고 있습니다. 이게 동적 바인딩의 시작입니다.
  2. obj.paint(); 호출
    • paint() 메서드는 A 클래스에서 정의된 메서드입니다.
    • 먼저 "A"가 출력됩니다.
  3. draw(); 메서드 호출
    • 이제 중요한 부분이 바로 여기입니다.
    • draw()는 A 클래스에서 정의된 메서드이지만, 실제 객체가 B 클래스의 인스턴스이므로, 자식 클래스 B에서 오버라이딩된 draw() 메서드가 호출됩니다.
    • 그래서 "D"가 출력됩니다.

출력 결과:

 
AD

결론: 부모 클래스에서도 자식 클래스의 메서드가 호출되는 이유

  • 동적 바인딩 덕분에, 메서드가 호출될 때 실제 객체의 타입에 따라 메서드가 결정됩니다.
  • 이 경우, 부모 클래스에서 메서드를 호출하더라도 실제 객체가 자식 클래스라면, 자식 클래스의 오버라이딩된 메서드가 호출됩니다.

요약

  • 부모 클래스에서 draw()를 호출했는데도 자식 클래스의 draw()가 호출되는 이유는 동적 바인딩 때문입니다.
  • 참조 변수의 타입이 부모 클래스여도, 실제 객체가 자식 클래스일 경우, 자식 클래스에서 오버라이딩된 메서드가 호출됩니다.

이 개념이 바로 객체지향 프로그래밍의 다형성(polymorphism)을 가능하게 하는 중요한 기초입니다.