정적 바인딩
컴파일 시점에서 포인터 변수의 자료형에 의해서 호출될 함수가 결정되는 것.
동적 바인딩
컴파일할 때 호출할 멤버함수를 결정하지 않고, 프로그램이 실행되는 동안에 즉, 함수 호출이 실제로 일어나는 시점에서 멤버함수가 어떤 클래스의 멤버함수인지를 결정하도록 하는 것.
프로그램 실행 중에 포인터 변수가 가리키는 실체는 매번 변경되므로 동일한 포인터 변수로 함수를 호출하더라도 바인딩 되는 함수가 융통성 있게 바뀌어 호출되는 것.
virtual 키워드를 사용한 가상함수
C++에서 기본적으로 모든 함수가 정적 바인딩을 한다.
하지만 경우에 따라서 동적 바인딩이 필요한 경우에는 동적 바인딩을 하고자 하는 함수가 선언되어 있는 부모 클래스에 가서 함수를 선언(원형정의) 할 때 virtual 이라는 키워드를 함수의 선언 앞에 덧붙인다.
virtual void Prn();
virtual 키워드가 붙어서 동적 바인딩을 하는 함수를 가상함수라고 한다.
어떤 함수가 호출 될지 프로그램 실행 전에 결정 되는 것과 프로그램 실행 중에 호출 될 함수가 결정되는 것은 차이가 있다.
C++ 에서는 가상 함수, 즉 dynamic binding을 통해 포인터가 가리키는 객체에 따라 각기 다른 동작을 할 수 있는 다형성을 구현할 수 있다.
* 정리
- 정적 바인딩은 컴파일할 때 호출될 함수를 결정한다.
- 모든 함수는 기본적으로 정적 바인딩을 한다.
- 동적 바인딩은 호출될 함수를 결정한다.
- 동적 바인딩을 위해서는 가상함수로 선언되어야 한다.
- 가상함수는 기반클래스의 함수 선언문 맨 앞에 예약어 virtual를 덧붙인다.
- 가상함수는 상속된다.
'프로그래밍 > C, C++' 카테고리의 다른 글
디렉토리 분리함수 _splitpath (0) | 2015.06.16 |
---|---|
C언어 출력타입 %d, %f, %e, %o, %x, %u, %g ...... (0) | 2013.12.11 |
상속(Inheritance) (0) | 2013.07.07 |
바인딩 (0) | 2013.06.03 |
가상함수 (0) | 2013.06.03 |