C++ 정적 바인딩과 동적 바인딩 Static Binding & Dynamic Binding
Intro
정적 바인딩과 동적 바인딩의 차이
바인딩 (Binding)
프로그램 소스에 쓰인 변수, 이름 식별자들에 대해 값 또는 속성을 확정하여 변경할 수 없게 묶는(bind)과정
함수가 호출될때 함수의 주소를 연결해 주는 것
정적 바인딩 동적 바인딩
바인딩이 일어나는 시간에 따라 정적 바인딩
과 동적바인딩
을 분류 할 수 있다.
정적 바인딩
- 컴파일 시점에 일어나고 프로그램 실행 과정에서 변하지 않고 유지되는 바인딩
변수와 같이 명시적으로 타입과 변수명을 선언하는 것 ex) int a = 0;
컴파일 시간에 호출될 함수로 점프할 주소가 결정되어 바인딩 되는 것
장점
컴파일시 정보가 결정되기 때문에 속도가 빠르며 에러를 조기 발견 할 수 있어 안정적임
단점
컴파일 이후 변경이 불가능하다.
동적 바인딩
- 실행 시간(Runtime)중에 결정되며 실행 과정에서 변경되는 바인딩
바인딩을 실행 시간에 결정하도록 미루어뒀다가 가상 함수 호출시 오버라이딩된 가상 함수를 동적으로 찾아 호출한다.
Base의 f()에 대한 호출이 런타임에 동적바인딩에 의해 Dervied Class의 f()가 실행된다.
장점
런타임에 자유롭게 성격이 바뀌므로 적응성이 높다.
단점
미리 점프할 메모리 공간을 가지고있어(32비트 4byte, 64비트 8byte) 메모리 낭비가 될 수 있다.
타입 체킹으로 수행 속도가 저하나 안정성 문제가 발생할 수 있다.
동적 바인딩을 하는 이유
어떤 포인터에 의해 접근되었는 지에 상관없이 참조된 인스턴스의 실제 클래스형에 따라 재정의된 함수 호출이 가능
댓글남기기