인터페이스 클래스

정혜창·2025년 2월 5일
0

내일배움캠프

목록 보기
28/41

언리얼에서 인터페이스 클래스는 다양한 액터와 객체가 구현할 수 있는 인터페이스 함수들을 선언하는 클래스이다. UInterface 베이스 클래스와 IInterfaceName 인터페이스 객체를 다루고 있다.

인터페이스 클래스는 여러 클래스간에 공통의 기능(메서드)을 강제하는 계약(Contract)을 정의할 때 사용한다. C++의 순수 가상함수를 이용한 인터페이스와 유사하지만 언리얼은 UInterface 라는 시스템을 통해 리플렉션과 블루프린트 통합, 가비지 컬렉션 등의 엔진 기능과도 연동할 수 있도록 지원한다.


🎮 언리얼 인터페이스의 두 가지 부분

언리얼에서 예를 들어 ItemInterface 라는 인터페이스를 만들려면 두 개의 클래스를 생성해야 한다.
👉 UItemInterface → UInterface를 상속받는 "메타데이터 클래스"
👉 IItemInterface → 실제로 인터페이스를 구현하는 "기능 클래스"
즉, 인터페이스를 선언하면 UItemInterfaceIItemInterface 두 개가 동시에 필요하다.

  • 언리얼 엔진에서 메타데이터란?

(🔥여기서 잠깐) 메타 데이터의 일반적 의미 : 메타데이터(metadata or metainformation)는 데이터(data)에 대한 데이터이다. 이렇게 흔히들 간단히 정의하지만, 캐런 코일(Karen Coyle)에 의하면 '어떤 목적을 가지고 만들어진 데이터(constructed data with a purpose)'라고도 정의한다.

언리얼 엔진에서 메타데이터(Metadata)는 에디터 및 리플렉션 시스템에서 클래스, 변수, 함수 등의 속성을 정의하는 추가 정보를 의미한다. 이를 통해 특정 기능을 추가하거나, 엔진이 객체를 처리하는 방식을 제어할 수 있다.

  • 왜 인터페이스에 메타데이터 클래스를 만들어야 할까?

  1. 언리얼에서 인터페이스를 만드는 방식
    언리얼 엔진의 인터페이스는 일반적인 C++ 인터페이스와 다르게 UCLASS가 적용된 "메타데이터용 클래스"와 C++인터페이스 클래스로 나뉘어 있다.

  2. 왜 UInterface가 필요한가?
    UInterface 클래스는 리플렉션 시스템이 해당 인터페이스를 인식할 수 있도록 하는 역할을 한다.
    언리얼 엔진의 리플렉션 시스템은 UCLASS, USTRUCT, UENUM 등의 오브젝트만 인식할 수 있다.
    그런데, C++의 순수 인터페이스는 UObject가 아니기 때문에 리플렉션 시스템이 인식할 수 없다.
    즉, 리플렉션 시스템이 인식하도록 하기 위해 UInterface가 필요하다.


✅ 예제 : UItemInterfaceIItemInterface의 관계

// 1️⃣ 인터페이스의 메타데이터 부분 (UItemInterface)
UINTERFACE(MINIMAL_API)
class UItemInterface : public UInterface
{
	GENERATED_BODY()
};

// 2️⃣ 실제 인터페이서 기능을 정의하는 부분 (IItemInterface)
class IItemInterface 
{
	GENERATED_BODY()

public:
	virtual void UseItem() = 0; // 인터페이스에서 꼭 구현해야 하는 함수 (순수 가상 함수)
};

이제 이 인터페이스를 사용하려면 IItemInterface를 상속해야 한다.

class AMyCharacter : public AActor, public IItemInterface
{
	GENERATED_BODY()
    
public:
	virtual void UseItem() override
    {
    	UE_LOG(LogTemp, Warning, TEXT("Item Used"));
    }
};

📌 UItemInterface는 직접 사용할 일이 거의 없고, IItemInterface만 상속받아서 사용한다.

profile
Unreal 1기

0개의 댓글

관련 채용 정보