본문 바로가기

Programming/C / C++

가상 함수 동작 원리와 단점

 동작 원리  
 : 가상함수는 어떻게 동작을 할까? 객체가 생성되면 멤버 함수는 메모리의 코드영역에 올라가게 된다. 우리가 생성한 객체는 코드 영역에 있는 이 멤버함수를 공유하게 것이죠. 하지만 클래스에 한개 이상의 가상 함수가 있을 경우에는 컴파일러는 실제 호출되어야 할 함수의 위치 정보를 가지고 있는 가상 함수 테이블(Vritual Table) 이라는 것을 만들고, 클래의 객체에는 가상 함수 테이블을 위한 포인터가 멤버 변수로 추가 시킵니다. 일반적으로 가상 함수가 있는 객체는 가상 함수 테이블에 있는 함수만을 호출하는 원칙을 가지고 있다.

 가상 함수의 단점  
 : 가상 함수를 사용해서 생기는 단점은 두가지를 들 수 있다. 첫번째로, 가상함수를 쓰면 가상함수 테이블을 만드므로 그만큼의 메모리 공간의 소모가 일어 나게 되기 마련이고, 두번째로 직접 가야 할 부분을 이 가상함수 테이블을 거쳐 가야 하니까 속도면에서 약간의 차이가 나게 되는 단점이 있습니다. 이렇게 단점이 있는것을 왜 쓰냐? 그만큼의 장점 부분이 차지하는 부분이 더 크기 때문입니다.