Programming Language/C, C++

C++ 가상 함수 (virtual) - 동적 바인딩

MOLOKINI 2014. 11. 7. 16:12

동적 바인딩

기본 클래스의 포인터나 레퍼런스로 가상 함수를 호출하면 기본 클래스의 포인터나 레퍼런스가 어떤 클래스의 객체를 가리키는가에 따라 호출될 함수가 결정됩니다,

- 실행 시간에 호출될 함수를 결정하는 것을 동적 바인딩(Dynamic Binding)이라고 합니다.

- 반면, 컴파일 시간에 호출될 함수를 미리 결정하는 것을 정적 바인딩(Static Binding)이라고 합니다.

 

 

특징 정적 바인딩 동적 바인딩
바인딩 시기 컴파일 시간 실행 시간
구분 일반 함수 가상 함수
장점 동적 바인딩에 비해 처리속도가 빠르다 프로그램의 융통성이 크다
단점 프로그램의 융통성이 작다 정적 바인딩에 비해 처리속도가 늦다

 

가상함수를 제외한 모든 함수는 정적 바인딩으로 처리됩니다.

- 정적 바인딩은 컴파일 시간에 호출될 함수를 미리 정해두는 방법입니다.

가상함수는 동적 바인딩으로 처리됩니다.

- 동적 바인딩은 기본 클래스 포인터나 레퍼런스로 호출하더라도 실행 시간에 실제로 사용된 객체의 클래스형에 의해 호출될 함수가 결정됩니다.

- 동적 바인딩을 사용하는 경우에는 처리속도가 느려지기 때문에 모든 멤버 함수를 가상 함수로 만들 필요는 없습니다.

- 파생 클래스에서 재정의될 것이 예측되고 다형성을 이용해 처리하고자 하는 함수를 가상함수로 정의합니다.