언리얼에서 인터페이스는 어떤 용도로 사용되는걸까? 그리고 CPP에서는 어떻게 인터페이스를 사용할 수 있을까?
먼저 인터페이스는 프로그래밍에서 특정 객체 또는 클래스가 따라야 할 계약 또는 약속을 정의하는 프로그래밍 구조라고 말할 수 있다. (말이 어려운데 나중에 천천히 예시를 들면서 설명할것이다.)
인터페이스가 주로 정의하는것은 함수의 이름, 반환값 매개변수 인데 그러니까

이런식으로 띡 하고 정의만 갔다놓는것이다.
인터페이스는 객체가 반드시 가져야할 기능들을 정의를 미리 해두고, 객체에서 따로따로 구현할 수 있게끔 이름을 빌려준다. 라는 식으로 이해하면 될것 같다.
왜 이름을 빌려줘야하는데?
예시를 들어보자. 예를 들어 내가 Enemy 라는 객체를 만들었고, Enemy 에는 각각의 하위 클래스 Melee Enemy, Range Enemy, Mage Enemy 즉 검사, 궁수, 마법사들이 있다고 한다.
Enemy에는 각각의 무기들이 있다고(검, 활, 마법봉) 가정하자. 나는 Attack Component 라는 컴포넌트를 만들어서, 이 Atttack 에서 Enemy 들의 공격 로직들을 작성하고, Weapon들을 각각 장비하게 하고 싶다.
그럼 Attack 에서 각각의 Enemy 들에게 정보를 상속 받는것보다, Attack 에서 그냥 명령을 내리는것이 더 단순할 것이다.

이런식으로 말이다.
언리얼에서 그럼 인터페이스는 어떻게 사용할까? 기본적으로 방금 말한 Message 를 활용하는 방식은 다음과 같다.

클래스를 다음과 같이 선언해주고, Interface 를 다음과 같이 작성한다. (Category는 원하는 카테고리에 맞춰서 작성하면 된다.)

이후 인터페이스를 구현할 클래스에서는

이렇게 인터페이스를 상속해주고,

virtual void 함수이름_Implementaiton() override; 과 같은 형태로 구현부로 작성한다.
그럼 구현부는 이렇게 만들었고 다른 함수에서 message를 보내면 각각의 형태에 맞게 인터페이스가 작동할 것이다.

임의의 객체에서 Null 체크를 한번 해주고 난뒤, Interface 가 상속되어 있다면 이라는 조건을 다음과 같이 if 문에다가 넣은 이후
Excute_함수이름(부르고있는 객체)
라는 형식으로 작성해주면 message로 부르고 싶은 객체에 있는 Interface 함수를 작동시킬 수 있다.
'Unreal Engine 5' 카테고리의 다른 글
| 언리얼에서 Bind<BindUFunction VS AddDynamic> (0) | 2025.01.29 |
|---|---|
| 언제 TOptional 과 TMap 을 사용해야할까? (0) | 2025.01.28 |
| 언리얼 CPP 에서 Enum을 BlackBoard로 가져오는방법 (0) | 2025.01.03 |
| 언리얼 튜토리얼 2 <캐릭터 만들기> (0) | 2024.12.25 |
| 졸업작품 다시 건드리기 (3) | 2024.10.31 |
