순수 가상함수는 부모클래스에서 당장은 구현을 제공하지 않고, 자식클래스에서 구현을 강제하는 문법이다.
C++ 프로그래밍에서, 순수 가상함수는 다음과 같은 포맷을 사용한다.
virtual void MyFunc() = 0;
C++의 순수 가상함수는 C# / java에서의 추상 함수와 같다.
순수 가상함수는 자식클래스가 해당 함수를 무조건 오버라이딩하도록 함으로써, 동적 바인딩을 통한 확장성을 높여 프로그램의 디자인을 좋게 만든다.
그런데, 언리얼 엔진 5에서는 순수 가상함수의 문법이 조금 다르다.
상단의 네이티브 C++ 문법을 그대로 쓰면, 다음과 같은 컴파일 에러 메시지를 볼 수 있다.
'Only functions in the second interface class can be declared abstract'.
기본적으로 언리얼 엔진에서 interface가 아닌 모든 UClass들은 CDO를 만들어야 하기 때문에, 모든 함수가 구현을 가지고 있어야 하기 때문이다.
CDO에 대한 설명은 https://ciel45.tistory.com/3
따라서 언리얼 엔진에서는 CDO 시스템을 사용하면서도 내부적으로 순수 가상함수를 쓸 수 있게 해주는 문법을 만들었다.
그 문법은 다음과 같다.
//PURE_VIRTUAL 매크로 사용
virtual void MyFunc() PURE_VIRTUAL (MyClass::MyFunc,);
다소 해괴한 문법이지만, 실제로 저렇게 작성할 시 가상함수가 잘 작동되는 것을 볼 수 있다.
프로젝트에서의 사용 예시 : https://ciel45.tistory.com/72
'언리얼 엔진 5 > 공부' 카테고리의 다른 글
[언리얼 엔진 5] 리플렉션 시스템 (0) | 2024.09.29 |
---|---|
[언리얼 엔진 5] 싱글톤 패턴 (Subsystem) (0) | 2024.04.10 |
[언리얼 엔진 5] Retriggerable Delay 사용법 (FLatentActionInfo) (0) | 2024.04.10 |
[언리얼 엔진 5] 블루프린트에서 디버깅하는 방법 (0) | 2023.12.30 |
[언리얼 엔진 5] 라이브 코딩 내용이 적용이 안될 때 (0) | 2023.12.25 |