ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [UE5] 추상클래스와 인터페이스
    UE5 2024. 12. 6. 07:20

    주요 차이점

    특징 추상 클래스 인터페이스
    주요 목적 공통 기능 재사용 및 확장 클래스 간의 약속(규격) 정의
    상속 방식 단일 상속 다중 상속 가능
    멤버 멤버 변수와 일반 메서드 포함 가능 멤버 변수를 가질 수 없음
    순수 가상 함수 일부만 포함 가능 모든 함수가 순수 가상 함수
    생성자 생성자 정의 가능 생성자 정의 불가
    사용 예시 상속받는 클래스 간의 기능 공유 클래스 간의 규격(행동) 정의
    다중 상속 지원 여부 단일 상속만 가능 다중 상속 가능

     

    사용 사례

     

    추상 클래스

    • 공통적인 동작을 상속받아 재사용 할 때
    • 상태(멤버 변수)와 공통 메서드를 제공해야 할 때
    • 일부 메서드는 구현하고, 나머지는 파생 클래스에서 구현하도록 강제할 때
    • 멤버 변수와 메서드 정의 가능
    • 순수 가상 함수(=0)와 일반 메서드 혼합 가능
    • 예) 게임 캐릭터 시스템
    class ACharacter
    {
    public:
        virtual void Attack() = 0; // 추상 메서드 (순수 가상 함수)
        void Move() { UE_LOG(LogTemp, Log, TEXT("Moving...")); } // 공통 구현 제공
    
    protected:
        int32 Health; // 상태(멤버 변수)
    };
    • 파생 클래스
    class AKnight : public ACharacter
    {
    public:
        void Attack() override { UE_LOG(LogTemp, Log, TEXT("Knight attacks!")); }
    };

     

     

    인터페이스

    • 공통된 행동의 규격(규약)만 정의해야 할 때
    • 상태를 가질 필요가 없고, 오직 동작만 필요할 때
    • 클래스가 여러 인터페이스를 동시에 구현해야 할 때
    • UINTERFACE, IInterface
    • 순수 가상 함수만 정의 가능
    • 멤버 변수는 포함할 수 없음
    • 예) 게임에서 다양한 이벤트 리스너 정의
    class IEventListener
    {
    public:
        virtual void OnEventTriggered() = 0; // 순수 가상 함수만 존재
    };
    class UGameEventListener : public IEventListener
    {
    public:
        void OnEventTriggered() override { UE_LOG(LogTemp, Log, TEXT("Event triggered!")); }
    };
    
    class UAudioEventListener : public IEventListener
    {
    public:
        void OnEventTriggered() override { UE_LOG(LogTemp, Log, TEXT("Audio event triggered!")); }
    };

     

     

    요약

     

    UE5에서는 인터페이스는 주로 행동 규약을 정의하는 데 사용되고, 추상 클래스는 공통 기능 제공에 사용됨

    그러나 다중 상속 지원, 블루프린트와의 통합, 경량화된 설계로 인해 인터페이스가 더 자주 사용됨

Designed by Tistory.