본문 바로가기

게임프로그래밍/실습1

[언리얼 실습] 25. 언리얼 인터페이스 만들기

 

 


목차

  1. 인터페이스란?
  2. 언리얼 인터페이스 만들기

1. 인터페이스란?

 

인터페이스는 클래스나 객체의 구조를 미리 설정하고 이를 상속 받은 클래스나 객체가 해당 속성을 반드시 구현하도록 하는 것을 말한다.

 

인터페이스 자체는 실제 구현을 하지는 않고 메서드의 이름과 인자, 반환값만 정의하는데 이것을 추상화라고 한다.

 

추상화되어 있기 때문에 인터페이스를 상속 받는 클래스에서 각각 필요한 기능들을 구현해서 사용할 수가 있고 이를 다형성이라고 한다. 인터페이스를 통해 여러 클래스에서 같은 규칙을 따를 수 있게 되기 때문에 코드의 일관성을 유지할 수 있으며 이는 객체지향언어의 핵심적인 특징 중 하나이다.

 

C++에는 인터페이스가 존재하지 않지만 순수가상함수를 통해 이를 구현할 수 있는데 순수가상함수란 함수가 구현되어 있지 않고 그저 선언만 되어있는 것을 말한다.


 

2. 언리얼 인터페이스 만들기

 

비록 C++에서 인터페이스가 존재하지는 않지만 언리얼엔진에서는 인터페이스 클래스를 제공해줘 다른 언어에서 존재하는 인터페이스의 기능을 이용할 수 있다.

 

 

C++ 클래스 생성에 들어가면 하단에 언리얼 인터페이스가 존재하는 것을 볼 수 있다.

 

이를 통해 인터페이스를 구현할 수 있다.

 

 

인터페이스를 만들면 위와 같이 헤더파일과 cpp 파일이 만들어진다. cpp 파일에서 설명을 보면 순수가상함수가 아닌 경우 기능을 추가하라고 되어 있는데 인터페이스에서 함수를 구현하면 인터페이스의 주요 특징 중 하나인 추상화를 잃게 된다.

 

그렇기 때문에 cpp 파일을 사용하는 일은 없을 것이다. (만약 함수를 구현하고 싶다면 그것은 인터페이스가 아니라 일반적인 클래스로 만들었어야 한다.)

 

그러니 헤더파일을 살펴보도록 하자.

 

// This class does not need to be modified.
UINTERFACE(MinimalAPI)
class UHitInterface : public UInterface
{
	GENERATED_BODY()
};

/**
 * 
 */
class PRACTICE_API IHitInterface
{
	GENERATED_BODY()

	// Add interface functions to this class. This is the class that will be inherited to implement this interface.
public:
};

 

헤더 파일을 살펴보면 클래스가 두개가 생성되어 있는 것을 볼 수 있다.

 

설명에서 나와있는대로 위쪽에 있는 클래스는 건드릴 필요가 없다. 위쪽 클래스는 인터페이스를 언리얼에 존재하는 리플렉션 시스템에 노출시키기 위해 존재하는 것이라고 한다.

 

그러니 함수의 선언은 아래쪽에 있는 클래스에서 하면 된다.

 

인터페이스에 함수 하나를 선언해보자.

 

// 위쪽 클래스 생략

class PRACTICE_API IHitInterface
{
	GENERATED_BODY()

	// Add interface functions to this class. This is the class that will be inherited to implement this interface.
public:
	virtual void GetHit() = 0;
};

 

이렇게 순수 가상함수로 만들 수 있는데 순수 가상함수로 만들지 그냥 가상함수로 만들지는 선택사항이라고 한다.

 

언리얼 엔진에서는 처음 시작할때 말한 것처럼 순수가상함수가 아니라 다른 언어에서 존재하는 것처럼 인터페이스를 구현할 수 있기 때문에 실제로 인터페이스의 메서드를 선언할때는 이렇게 하지 않고 다른 방법을 사용할 것이다.

 

그 방법은 차후 알아보기로 하자.