[바인딩] 정적 바인딩과 동적 바인딩

 

프로그래밍 세계에서 바인딩프로그램의 변수나 함수, 메서드 등을 식별하여 연결하는 과정을 의미한다. 이러한 바인딩에는 크게 두 가지 유형, 동적 바인딩정적 바인딩이 있다.

이 두 유형의 바인딩은 프로그래밍 언어의 특성과 운영 방식에 중요한 영향을 미친다.

 



동적 바인딩(Dynamic Binding 또는 Late Binding)

동적 바인딩은 프로그램이 실행되는 시간(runtime)에 메서드나 함수를 결정하는 방식이다. 이는 객체의 실제 타입을 기반으로 호출될 메서드나 함수를 결정하기 때문에 객체의 타입에 따라 바인딩된 메서드가 변경될 수 있다.

이러한 특성 때문에 동적 타입 언어인 Python이나 C#에서 주로 사용된다.

예를 들어, Python에서는 클래스 내부에 정의된 메서드가 실행 시간에 객체의 실제 타입에 따라 동적으로 호출된다.



정적 바인딩(Static Binding 또는 Early Binding)

반면 정적 바인딩은 컴파일 시간(compile time)에 따라 메서드나 함수가 결정되는 방식입니다. 컴파일러가 타입 정보를 기반으로 어떤 메서드나 함수를 호출할지 결정하기 때문에 한 번 결정된 바인딩은 실행 시간에 변경되지 않는다.

이는 C++, Java와 같은 정적 타입 언어에서 주로 사용되며 정적 바인딩은 다형성이 적용되지 않는 특성을 가진다.



Static Method와 Class Method

정적 바인딩의 개념을 더욱 확장하여 Python에서는 `@staticmethod`와 `@classmethod`, 즉 데코레이터를 통해 클래스 레벨에서 메서드를 정의할 수 있다.

@staticmethod는 클래스나 인스턴스와 독립적으로 동작하는 메서드로 클래스나 인스턴스를 통해 호출할 수 있지만 클래스 내부의 어떤 속성이나 메서드에도 접근할 수 없다.

반면 @classmethod는 첫 번째 매개변수로 클래스 자신을 전달 받으며 클래스 변수에 접근하거나 클래스 내부의 다른 메서드를 호출할 수 있다.



동적 바인딩과 정적 바인딩은 각각의 장단점이 있다. 동적 바인딩은 유연성을 제공하지만 오버헤드가 발생할 수 있으며

정적 바인딩은 실행 시간의 효율성을 높이지만 코드의 유연성이 다소 떨어질 수 있다.