UE5

[UE5] 순수 가상 함수(Pure Virtual Function)

검정색필통 2024. 12. 6. 05:34
virtual void FunctionName() = 0;

 

  • 순수 가상 함수는 함수의 구현체(내용)가 없고, 파생 클래스에서 반드시 구현해야 하는 함수
  • 클래스 선언에서   = 0   을 사용하여 정의
  • 순수 가상 함수는 기본 클래스가 추상 클래스(Abstract Class)가 되도록 만듬
  • 추상 클래스는 직접 객체를 생성할 수 없으며, 오직 파생 클래스에서만 사용
class IPlayerScoreListener
{
public:
    virtual void OnPlayerScoreChanged(int32 NewPlayerScore) = 0; // 순수 가상 함수
};
  • 파생 클래스에서의 순수 가상 함수 구현 예시
class PlayerScoreHandler : public IPlayerScoreListener
{
public:
    void OnPlayerScoreChanged(int32 NewPlayerScore) override
    {
        UE_LOG(LogTemp, Log, TEXT("Player score changed: %d"), NewPlayerScore);
    }
};

 

 

왜 순수 가상 함수가 필요한가?

  • 다형성(Polymorphism) 지원
    • 순수 가상 함수는 파생 클래스에서 각기 다른 방식으로 구현되도록 강제하여 다형성을 제공
    • 예) 여러 종류의 객체가 같은 인터페이스를 구현하지만, 각각 고유한 동작을 할 수 있음
IPlayerScoreListener* Listener = new PlayerScoreHandler();
Listener->OnPlayerScoreChanged(100);

IPlayerScoreListener* Listener2 = new PlayerScoreHandler2();
Listener2->OnPlayerScoreChanged(100);
  • 인터페이스 역할
    • 순수 가상 함수는 클래스가 인터페이스 역할을 수행하게 함
    • 인터페이스는 특정 기능을 표준화하고, 이를 따르는 모든 클래스에서 동일한 형태로 구현하도록 강제
  • 강제 구현
    • 파생 클래스에서 반드시 구현해야 하는 함수임을 명확히 하여 실수로 빼먹는 것을 방지