바인딩


바인딩이란 프로그램의 어떤 기본 단위가 가질 수 있는 구성요소의 구체적인 값, 성격을 확정하는 것을 말한다.

int num = 123; 이라는 c++ 문장이 있다 하면

위 문장에서 num은 변수 이름, int는 변수의 자료형, 123은 변수의 자료 값이다.

이것들은 모두 변수의 속성의 구체적인 값이다.

이처럼 이름, 자료형, 자료값에 각각 num, int, 123과 깉은 구체적인 값을 할당하는 각각의 과정을 바인딩이라고 한다.

javascript에서 흔히 볼 수 있는 바인딩,,, 함수에서도 바인딩이 일어나는데, 이떄 바인딩은 어떤 코드에서 함수를 호출할 때 그 해당 함수가 위치한 메모리 주소로 연결해주는 것을 의미한다.

바인딩은 일어나는 시간에 따라 정적 바인딩, 동적 바인딩으로 분류할 수 있다.

정적 바인딩(Static Binding)

컴파일 시간에 일어나며, 실행 중 변하지 않고 유지된다.

int n; 이라는 문장에서 변수 n의 자료형은 컴파일 시간에 int로 할당되고, 실행 중에도 변하지 않는 변수 n의 속성이다.

위에서 함수에서 일어나는 바인딩은 어떤 코드에서 함수를 호출할 때 그 해당 함수가 위치한 메모리 주소로 연결하는 것이라고 했다. 함수의 정적 바인딩은 컴파일 시간에 호출될 해당 함수의 주소가 결정되어 바인딩 된다. 즉 실행 파일에 호출할 함수가 위치한 메모리 주소가 이미 확정되어 기록된 것이다. 추가로 일반적인 함수는 정적 바인딩이 일어난다.

정적 바인딩은 각 변수 값을 컴파일 시간에 정하므로 필요한 메모리 용량이 컴파일 시간에 확정된다. 이 때문에 함수가 여러번 호출될 때마다 계속해서 또 다른 메모리 공간을 할당받아 재귀 호출 실행이 가능하다.

장점

정적 바인딩은 컴파일 시간에 대부분 변수들의 속성이나 호출될 함수의 주소를 확정해놔서 실행 시간이 단축된다. (속도가 빨라졌다)

동적 바인딩(Dynamic Binding)

실행 시간(run time) 중에 일어나며, 프로그램 실행 도중 변경이 가능하다.

Python이 대표적인 예이다. Python은 인터프리터 언어이다.

num=10 문장에서, python은 실행 시간에 변수의 자료형을 결정한다.

함수의 동적 바인딩은 실행파일을 만들 때 호출할 함수의 메모리 주소가 확정되지 않았기 때문에 보류 상태로 존재한다. 이후 실행할 때 호출할 함수의 주소가 결정되기 때문에, 이 주소를 저장할 공간을 미리 확보해둔다. 실행되는 것이 확정되지 않은 함수를 위해 저장공간을 미리 확보해야 한다는 것 때문에 메모리 관리 측면에서 비효율적일 수 있다.

보통 가상함수들이 동적 바인딩을 한다.