공부 학습

C++에서 virtual(가상함수) 란..?

Multitab 2022. 8. 1. 18:12

C++를 보다보면 Virtual가 붙어있는 함수를 볼수 있습니다.
Virtual은 클래스의 함수를 가상함수로 만들어 주는 기능입니다. 공식적인 설명으로는 이러합니다.

기본 클래스(상속되지 않은 클래스) 내에서 선언되어 파생 클래스에 의해 재정의되는 맴버 함수입니다.
포인터(Pointer) 또는 기본 클래스에 대한 참조(Reference)를 사용하여 파생 클래스의 객체를 참조하면 해당 객체에 대해가상 함수를 호출하고 파생 클래스의 함수를 실행할 수 있습니다. 이는 주로 실행시간(Runtime)에 함수의 다형성(Polymorphism)을 구현하는데 사용됩니다.
출처: https://yeolco.tistory.com/125 [

이게 무슨 말일까요?

위 정의에서 가상함수를 정의할수 있는 중요한 말은 "실행시간(Runtime)에 함수의 다형성(Polymorphism)을 구현하는데 사용"입니다.
C++는 기본적으로 컴파일러 언어입니다. 소스코드를 컴파일하면 컴파일을 할동안에 모든 함수 호출마다 어떤 함수가 호출될지 정해지게 됩니다.

만약 함수에 Virtual이 붙어서 가상함수가 된다면 어떤 함수가 호출될지는 실행시간에 결정되게 됩니다. 따라서 클래스마다 같은 함수가 존재하고 이 함수들이 비슷한 작업을 했을때 호출될 함수가 자식 클래스인지 부모클래스인지, 매개변수가 있는지 없는지의 함수들의 특징들을 따져서 같은 이름의 함수에도 여러 형태를 띄게 할수 있는 "다형성"을 실현할수 있는 겁니다.

컴파일러 내부에서 가상함수를 다루는 방법은 여기 잘 정리되어 있습니다.
https://chrismare.tistory.com/entry/%EA%B0%80%EC%83%81-%ED%95%A8%EC%88%98-virtual-Function(미래를 설계하는 개발자 )

그리고 가상함수의 쓰임에 있어 잘정리된 블로그도 공유합니다
https://yeolco.tistory.com/125(열코의 프로그래밍 일기)

'공부 학습' 카테고리의 다른 글

IOCP 서버 프로그래밍  (0) 2022.08.02
Unity에 IOCP서버 연동하기  (0) 2022.08.01
게임 서버의 이해  (0) 2022.07.27
머신러닝 정리(종합)  (0) 2022.07.25
Catboost 기본부터 알아보기  (0) 2022.04.02