언리얼 추상 클래스, 순수 가상 함수 사용법

Woogle·2023년 12월 14일
0

언리얼 엔진 5

목록 보기
49/59

📄 기초 개념

✏️ 추상 클래스

  • 순수 가상 메소드(pure virtual method)를 포함하는 클래스.
  • 직접 인스턴스화할 수 없다.

✏️ 순수 가상 함수

  • 기본 구현이 없는 가상(virtual) 함수.
  • 반드시 상속받은 자식 클래스에서 해당 순수 가상 함수를 재정의(override) 시켜줘야 한다.

🚀 C++ 클래스의 순수 가상 함수

virtual void Foo() = 0;

📄 언리얼 엔진에서 사용법

✏️ CDO (Class Default Object)

  • 실행 초기의 런타임 과정에서 언리얼 오브젝트마다 클래스 정보와 함께 언리얼 오브젝트의 인스턴스(Class Default Object)가 생성된다.

  • 따라서 UClass 내에 순수 가상 함수를 그냥 선언할 경우 인스턴스화할 수 없기 때문에 컴파일 에러가 발생한다!

  • 이럴 때, 아래처럼 언리얼 매크로를 활용하면 컴파일 에러를 해결하고 순수 가상 함수를 선언할 수 있다.

🚀 해결 코드

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "Weapon.generated.h"

// "추상 베이스 클래스" 선언
UCLASS(Abstract)
class PHOLDERON_API AWeapon : public AActor
{
	GENERATED_BODY()
   
protected:
	// "순수 가상 함수" 선언
    virtual void Foo() PURE_VIRTUAL(AWeapon::Foo, ;);
}

✏️ UCLASS(Abstract)

  • Abstract 지정자는 클래스를 "추상 베이스 클래스" 로 만든다.
  • 즉, 이 C++ 클래스 액터를 월드에 직접 배치할 수 없다.
  • 그러나 이 클래스를 상속한 자식 클래스가 추상형(Abstract)이 아니라면 레벨에 배치할 수 있다.

🚀 (참고) 추상 블루프린트 클래스 만들기

  • 'Class Settings → Class Options → Generate Abstract Class'를 활성화한다.

✏️ PURE_VIRTUAL

  • 언리얼에서 순수 가상 함수 선언 시 사용하는 매크로.
  • 매크로 안에 해당 함수의 시그니처만 포함하면 되고, 반환형이 필요한 경우 콤마 뒤에 포함해주면 된다.

🚀 반환형이 있는 경우

virtual bool IsValid() PURE_VIRTUAL(MyClass::IsValid, return false;);

📄 참고 자료

profile
노력하는 게임 개발자

0개의 댓글