설명
검으로 물거는 치는 것을 처리하는 방법과 일종의 방법들을 구현하는 데에 사용 가능.
선언만 하고 다른 class(무기)에서 override해서 인터페이스 클래스에 있는 기능을 사용가능하게 한다.
예를들어 Interface 클래스에 아래와 같은 코드가 있다고 가정한다.// IHitInterface class virtual void GetHit();
인터페이스는 함수를 선언만 하고 정의하지 않도록 설계되어있다.
1. 개는 APawn 클래스로부터 상속받은 클래스이다.
2. 개는 IHitInterface를 상속받을 수 있는 클래스이다.
3. 개는 IHitInterface를 상속받았으므로 GetHit()에 대한 자체적인 정의를 가질 수 있다.// 상속받음 GetHit() { Die(); }
- 인터페이스의 구현부분을 확인한 다음 GetHit()함수 호출만 가능하면 됨.
- 개는 GetHit()의 고유버전을 가지고 있기 때문에 GetHit()함수가 호출되면 개는 죽음.
- 이는 다른 객체에도 동일하게 적용가능
ex) 항아리라는 객체가 있고, IHitInterface 상속가능함->GetHit()에 대한 자체적인 정의로 항아리가 파괴되도록 함->검이 휘둘러지고, 항아리에 충돌이 발생하면 항아리는 해당 인터페이스를 통해 항아리 파괴가 가능함.
!!!결론은 충돌이 발생한 대상이 무엇인지에 관계 없이 GEtHit() 함수만 호출되면 나머지 처리는 대상이 직접 알아서 하게 구현한다는 것.
일일히 구현 함수를 생성하는것보다 효율적인듯 함.
인터페이스 클래스 생성
Unreal Interface
를 선택하고, 이름과 경로(Interface 클래스만 모아둔 폴더 따로 생성)를 지정한다.
헤더파일의 코드를 보면 2가지 클래스가 존재하는데 이는 언리얼엔진의reflection 시스템
과 관련이 있다.
- UHitInterface
인터페이스가 reflection에 참여할 수 있도록 함- IHitInterface
상속할 때 사용할 인터페이스
cpp 파일에 정의는 따로 하지 않으므로 필요없음.
... class STUDY_API IHitInterface { GENERATED_BODY() // Add interface functions to this class. This is the class that will be inherited to implement this interface. public: // pure virtual로 만들기 위해 `= 0`, 구현되지 않은 하위 클래스에서 재정의됨을 의미 virtual void GetHit() = 0;
이제 HitInterface를 구현하는 모든 클래스에서 해당 함수에 대한 재정의가 가능해진다.