(디자인 패턴)동적 바인딩

정적, 동적바인딩
홍윤's avatar
Aug 13, 2024
(디자인 패턴)동적 바인딩
 
💡
동적 바인딩(Dynamic Binding)은 객체 지향 프로그래밍에서 중요한 개념 중 하나로, 프로그램이 실행될 때 메서드 호출이 어떤 메서드와 연결될지를 결정하는 것을 의미합니다. 이를 이해하기 위해서는 먼저 바인딩의 기본 개념을 이해하는 것이 필요합니다.

1. 정적 바인딩(Static Binding)

  • 정적 바인딩은 컴파일 시점에 메서드 호출이 어떤 메서드와 연결될지를 결정하는 방식입니다. 자바에서 정적 바인딩은 주로 클래스 메서드(static method)나 private 메서드, final 메서드에 사용됩니다. 이러한 메서드들은 컴파일 타임에 어떤 메서드가 호출될지 명확하게 알 수 있기 때문에 정적 바인딩이 가능합니다.

2. 동적 바인딩(Dynamic Binding)

  • 동적 바인딩은 프로그램이 실행될 때, 즉 런타임에 메서드 호출이 어떤 메서드와 연결될지를 결정하는 방식입니다. 객체 지향 언어에서 다형성(polymorphism)을 지원하는 중요한 메커니즘입니다. 자바에서는 주로 인스턴스 메서드(instance method)에 대해 동적 바인딩이 이루어집니다.

3. 예시 및 해설

class Animal { void sound() { System.out.println("Animal makes a sound"); } } class Dog extends Animal { @Override void sound() { System.out.println("Dog barks"); } } public class Main { public static void main(String[] args) { Animal myAnimal = new Dog(); // Animal 타입의 참조 변수로 Dog 객체를 가리킴 myAnimal.sound(); // 어떤 메서드가 호출될지 런타임에 결정됨 } }
위의 코드에서 myAnimalAnimal 타입의 변수이지만, 실제로는 Dog 객체를 가리키고 있습니다. myAnimal.sound()를 호출하면 컴파일 타임에는 Animal 클래스의 sound() 메서드가 호출될 것처럼 보이지만, 실제로는 런타임에 Dog 클래스의 sound() 메서드가 호출됩니다. 이것이 바로 동적 바인딩의 예입니다.

4. 장점

  • 유연성: 동적 바인딩은 다형성을 통해 코드의 유연성을 높입니다. 코드의 재사용성과 확장성이 좋아집니다.
  • 캡슐화: 객체 지향 원칙 중 하나인 캡슐화를 강화합니다. 객체 내부의 세부 구현에 의존하지 않고 상위 타입의 인터페이스에만 의존하게 되므로 코드가 더 유지보수하기 쉬워집니다.

5. 주의점

  • 성능: 동적 바인딩은 런타임에 메서드를 결정하기 때문에 정적 바인딩보다 성능이 약간 떨어질 수 있습니다. 하지만, 대부분의 경우 이는 미미한 차이입니다.
  • 디버깅 어려움: 동적 바인딩은 실행 시간에 어떤 메서드가 호출될지 결정되므로, 코드의 흐름을 추적하기가 더 어려울 수 있습니다.
동적 바인딩은 객체 지향 프로그래밍의 핵심 개념 중 하나로, 다형성, 캡슐화, 상속과 같은 객체 지향 원칙을 실현하는 데 중요한 역할을 합니다.
 
Share article

Uni