Post List

2017/12/17

C++__정적 바인딩(Static binding)과 동적 바인딩(Dynamic binding)

Binding 이란?
- 프로그램 구성 요소의 성격을 결정해주는 것입니다. 예를 들면 변수의 데이터 타입이 무엇인지 정해지는 부분이랍니다.

바인딩의 종류
1. 정적 바인딩(Static binding)
 컴파일 시간에 값 또는 속성이 결정되는 것을 말하며, 컴파일 시간에 많은 정보가 결정되므로 실행 효율이 높습니다.

2. 동적 바인딩(Dynamic binding)
 실행시간(RunTime)에 값 또는 속성이 결정되는 것을 말하며, 런타임에 자유롭게 성격이 바뀌므로 적응성이 높습니다.


함수의 바인딩
- 함수를 만들어 컴파일을 하면 각각의 코드가 메모리 어딘가에 저장이 되겠지요. 그리고 함수를 호출하는 부분에는 그 함수가 저장된 메모리 주소값이 저장됩니다.

프로그램 실행 → 함수 호출 → 함수의 메모리 주소로 점프 → 함수 실행
위 과정에서 함수를 호출하는 부분에 함수가 위치한 메모리 번지로 연결시켜 주는 것을 함수 바인딩(Binding) 이라고 합니다.

함수를 호출하는 과정에서도 2가지의 바인딩 방법이 있습니다.

첫번째로, 정적(Static) 바인딩으로 일반적인 함수에 해당되는 바인딩입니다. 컴파일 시간에 호출될 함수로 점프할 주소가 결정되는 것이지요. 
아무래도 컴파일 시간에 이동할 함수의 메모리가 결정이 되기때문에 수행속도면에서 효율성이 높고, 타입 에러로 인한 문제점을 컴파일 시간에 발견할 수 있어 타입의 안정성또한 높습니다.

두번째는, 동적(Dynamic) 바인딩으로 가상함수(Virtual)라고도 합니다.
실행 파일을 만들 때 바인딩 되지 않고 보류 상태로 두고, 점프할 메모리 번지를 저장하기 위한 메모리 공간(4 byte), 즉 가상함수들의 메모리 번지를 저장하고 있는 가상테이블이라는 것을 가지고 있다가 런타임에 테이블을 통해 바인딩이 이루어집니다.
동적 바인딩으로 인해, 수행 속도 저하나 메모리 공간 낭비라는 단점이 있지만, 어떤 포인터에 의해 접근되었는 지에 상관없이 참조된 인스턴스의 실제 클래스형에 따라 재정의된 함수 호출이 가능하기 때문에
다형성을 구현할 수 있습니다.