C++ 환경에서 인터페이스는 클래스와는 조금 다르다.
인터페이스는 순수 가상함수만을 선언하는 클래스로, 함수를 정의하지 않고 순수 가상함수로만 선언한 다음에 이 인터페이스 클래스를 상속하는 모든 클래스는 인터페이스에서 선언한 순수 가상 함수들을 전부 구현해주어야 한다.
클래스의 상속은 기능을 복사하는 것이라면 인터페이스는 꼭 구현해야할 함수들을 지정해주는 것이다.
언리얼에선 인터페이스 클래스를 액터 클래스처럼 따로 만들어두었다.

C++클래스 추가 창에서 언리얼 인터페이스를 만들 수 있다.
// 인터페이스 클래스 헤더파일
#pragma once
#include "CoreMinimal.h"
#include "UObject/Interface.h"
#include "ItemInterface.generated.h"\
UINTERFACE(MinimalAPI)
class UItemInterface : public UInterface
{
GENERATED_BODY()
};
class SPARTAPROJECT_API IItemInterface
{
GENERATED_BODY()
}
보면 클래스가 2개가 선언이 되어있는 것을 볼 수 있다.
위에 선언된 클래스는 리플렉션 시스템에 인터페이스를 등록하기 위한 클래스이다.
리플렉션을 위해서만 선언된 클래스이기 때문에 따로 수정해줄 필요는 없다.
UINTERFACE가 리플렉션 시스템에 인터페이스를 추가해준다.
MinimalAPI는 현재 모듈 안에서만 접근이 가능하다는 의미이다.
인터페이스에 선언할 순수 가상 함수들은 밑의 클래스에서 선언해주면 된다.
인터페이스를 생성하면 헤더파일과 cpp파일이 쌍으로 생성이 되는데
인터페이스는 순수 가상 함수만을 선언하기 때문에 cpp파일이 필요 없다.
그런데도 cpp파일이 같이 생성되는 이유는 리플렉션 시스템이 클래스를 인식할 때 헤더파일과 cpp파일을 짝지어 인식하기 때문이다.
그렇기 때문에 cpp파일에 아무런 내용이 없더라도 cpp파일을 지우면 안된다.
이러한 내용이 언리얼 코드 컨벤션에도 존재한다.