이번에는 정적 바인딩(Static Binding) 동적 바인딩 (Dynamic Binding)이 무엇인지 알아 보기 전에 바인딩(Binding)이란 무엇인지 알아 보자.
바인딩이란 프로그램 소스에 쓰인 각종 내부 요소, 이름, 식별자들에 대해 값 혹은 속성을 확정하는 과정
이 과정이 빌드 중에 이루어지면 정적 바인딩이라고 하고,
실행 중에 이루어지면 동적 바인딩이라고 한다.
바인딩이란 프로그램 소스에 쓰인 각종 내부 요소, 이름, 식별자들에 대해 값 혹은 속성을 확정하는 과정
이 과정이 빌드 중에 이루어지면 정적 바인딩이라고 하고,
실행 중에 이루어지면 동적 바인딩이라고 한다.
그럼 한번 예를 들어 보자 아래와 같이 A,B,C가 상속관계에 있고 abc라는 함수가 virtual로 선언되어 있다고 하자.
- void main()
- {
- A* a = new [ 어떤것 ] //[] 안에 들어갈것이 무엇인지는 모른다.
- a->abc();
- }
객체 포인터 선언에 '어떤것'이 무엇인지 알아야 어떤것이 호출되는지 알수 있다. 포인터에 따라서 호출되는 함수가 결정되는 것이 아니라, 그 포인터가 가리키는 객체에 따라서 호출되는 함수가 결정된다는 것이 바로 동적 바인딩(Dynamic Binding)이다. 즉, 실제로 대상에 따라서 호출되는 함수가 상황에 따라 달라지는 것을 의미한다.
그럼 정적바인딩이란 무엇인가 ? 다음과 같은 선언이 있다고 해보자.
- void main()
- {
- int static_binding =2
- }
C++의 가상 함수의 바인딩은 문서상으로는 동적 바인딩으로 되어 있으나, 구현상으로는 런타임 성능을 높이기 위해 정적 바인딩을 쓰고 있다. 즉, 컴파일중에 아예 가상 함수 테이블을 파생 클래스에 맞게 바꿈으로써, 겉보기에는 파생 클래스 타입에서 오버라이드한 가상 함수를 호출하는 것처럼 보이게 만드는 것이다.
댓글 없음:
댓글 쓰기