C++ 정적 바인딩과 동적 바인딩 Static Binding & Dynamic Binding

Intro

정적 바인딩과 동적 바인딩의 차이

바인딩 (Binding)

프로그램 소스에 쓰인 변수, 이름 식별자들에 대해 값 또는 속성을 확정하여 변경할 수 없게 묶는(bind)과정

함수가 호출될때 함수의 주소를 연결해 주는 것

정적 바인딩 동적 바인딩

바인딩이 일어나는 시간에 따라 정적 바인딩동적바인딩을 분류 할 수 있다.

정적 바인딩

  • 컴파일 시점에 일어나고 프로그램 실행 과정에서 변하지 않고 유지되는 바인딩

변수와 같이 명시적으로 타입과 변수명을 선언하는 것 ex) int a = 0;

컴파일 시간에 호출될 함수로 점프할 주소가 결정되어 바인딩 되는 것

장점

컴파일시 정보가 결정되기 때문에 속도가 빠르며 에러를 조기 발견 할 수 있어 안정적임

단점

컴파일 이후 변경이 불가능하다.

동적 바인딩

  • 실행 시간(Runtime)중에 결정되며 실행 과정에서 변경되는 바인딩

바인딩을 실행 시간에 결정하도록 미루어뒀다가 가상 함수 호출시 오버라이딩된 가상 함수를 동적으로 찾아 호출한다.

1

Base의 f()에 대한 호출이 런타임에 동적바인딩에 의해 Dervied Class의 f()가 실행된다.

장점

런타임에 자유롭게 성격이 바뀌므로 적응성이 높다.

단점

미리 점프할 메모리 공간을 가지고있어(32비트 4byte, 64비트 8byte) 메모리 낭비가 될 수 있다.

타입 체킹으로 수행 속도가 저하나 안정성 문제가 발생할 수 있다.

동적 바인딩을 하는 이유

어떤 포인터에 의해 접근되었는 지에 상관없이 참조된 인스턴스의 실제 클래스형에 따라 재정의된 함수 호출이 가능

참고 자료

황기태, 명품 C++ Programming, 생능출판사,2013, 424쪽

https://secretroute.tistory.com/entry/140819

댓글남기기