[이득우의 언리얼] 7. 언리얼 C++ 설계 - 인터페이스

2026. 2. 4. 12:55·기타/[강의] 이득우의 언리얼 프로그래밍 Part1

개요

이번 강의에서는 Unreal Engine C++에서 인터페이스를 선언하고 활용하여 보다 안정적이고 유지보수가 용이한 클래스를 설계하는 방법을 학습합니다. 학교에서 학생, 교수, 교직원이 활동하는 상황을 구현하면서 인터페이스의 실용적인 활용법을 익힙니다.

 


 

인터페이스란 ?

인터페이스의 역할

**인터페이스(Interface)**는 객체 지향 설계에서 클래스가 반드시 구현해야 할 행동(메서드)을 지정하는 추상 타입입니다.

 

주요 활용 목적

  • 다형성(Polymorphism) 구현
  • 의존성 분리(Dependency Separation)
  • 명시적인 계약(Contract) 정의
  • 유연하고 확장 가능한 설계

 

Unreal Engine에서의 활용 예시

// Unreal Engine 내부 구조 예시
class AActor { }; // 월드에 배치 가능한 모든 오브젝트

class APawn : public AActor, public INavAgentInterface
{
    // INavAgentInterface를 구현하여
    // 내비게이션 시스템과 상호작용 가능
};
폰(Pawn) 클래스는 INavAgentInterface 를 구현함으로써 반드시 내비게이션 시스템을 사용해야 한다는 계약을 명시합니다.

 


 

Unreal C++ 인터페이스 특징

1. 두 개의 클래스 생성

Unreal에서 인터페이스를 생성하면 자동으로 2개의 클래스가 만들어집니다.

// ULessonInterface - 타입 정보 관리용 (U 접두사)
UCLASS()
class ULessonInterface : public UInterface
{
    GENERATED_BODY()
};

// ILessonInterface - 실제 구현용 (I 접두사)
class ILessonInterface
{
    GENERATED_BODY()
    
public:
    // 여기에 인터페이스 메서드 선언
};

역할 구분:

  • ULessonInterface (U 접두사): 리플렉션 시스템을 위한 타입 정보 보관
  • ILessonInterface (I 접두사): 실제로 상속받고 구현하는 인터페이스

2. 기본 구현 가능

Java, C# 등과 달리 Unreal C++ 인터페이스는 추상 타입으로 강제되지 않습니다

// ✅ 가능: 기본 구현 제공
class ILessonInterface
{
    GENERATED_BODY()
    
public:
    virtual void DoLesson()
    {
        UE_LOG(LogTemp, Log, TEXT("수업에 입장합니다."));
    }
};

// ✅ 가능: 순수 가상 함수
class ILessonInterface
{
    GENERATED_BODY()
    
public:
    virtual void DoLesson() = 0; // 구현 강제
};

 

 


 

사용방법

 

1. Super 키워드 제한

void UStudent::DoLesson()
{
    // ❌ 컴파일 에러: Super는 UPerson을 가리킴
    Super::DoLesson(); 
    
    // ✅ 올바른 방법: 인터페이스 클래스명 명시
    ILessonInterface::DoLesson();
}
이유: C++에서 Super는 단일 상속 체계에서만 작동합니다. Unreal의 리플렉션 시스템은 UCLASS를 상속받은 클래스만 Super로 인식합니다.

 

2. 인터페이스 캐스팅

// Unreal의 안전한 캐스팅
ILessonInterface* LessonInterface = Cast<ILessonInterface>(Person);

if (LessonInterface)
{
    // 캐스팅 성공 → 인터페이스 구현됨
    LessonInterface->DoLesson();
}
else
{
    // 캐스팅 실패 → 인터페이스 미구현
    // nullptr 반환으로 안전하게 확인 가능
}

'기타 > [강의] 이득우의 언리얼 프로그래밍 Part1' 카테고리의 다른 글

[이득우의 언리얼] 9. 언리얼 C++ 설계 - 델리게이트  (0) 2026.02.06
[이득우의 언리얼] 8. 언리얼의 C++ 설계 - 컴포지션  (0) 2026.02.06
[이득우의 언리얼] 6.언리얼 오브젝트 리플렉션 시스템 2  (0) 2026.02.04
[이득우의 언리얼] 5. 언리얼 오브젝트 리플렉션 시스템 1  (0) 2026.02.03
[이득우의 언리얼] 4. 언리얼 오브젝트 시스템  (0) 2026.01.21
'기타/[강의] 이득우의 언리얼 프로그래밍 Part1' 카테고리의 다른 글
  • [이득우의 언리얼] 9. 언리얼 C++ 설계 - 델리게이트
  • [이득우의 언리얼] 8. 언리얼의 C++ 설계 - 컴포지션
  • [이득우의 언리얼] 6.언리얼 오브젝트 리플렉션 시스템 2
  • [이득우의 언리얼] 5. 언리얼 오브젝트 리플렉션 시스템 1
Meoyoung's Development Logs
Meoyoung's Development Logs
내가 보려고 만든 블로그
  • Meoyoung's Development Logs
    이게뭐영
    Meoyoung's Development Logs
  • 전체
    오늘
    어제
    • 분류 전체보기 (229)
      • 게임잼 (3)
      • 언리얼 엔진 (53)
        • 꿀 Tip ! (7)
        • 트러블슈팅 (24)
        • 최적화 (0)
        • 캐릭터 (2)
        • VR (1)
        • Lighting (2)
        • 멀티스레드 (2)
        • 문자열 (0)
      • C++ (31)
        • 문법 정리 (8)
        • [서적] Fundamental C++ 프로그래밍 .. (5)
        • [서적] 이것이 C++이다 (11)
        • [서적] Effective C++ (7)
      • C# (1)
        • [서적] 이것이 C#이다 (1)
      • 코딩테스트 (26)
        • 프로그래머스 (6)
        • 알고리듬 (13)
        • 자료구조 (7)
      • 컴퓨터 과학 (27)
        • 운영체제 (11)
        • 데이터베이스 (0)
        • 디자인패턴 (0)
        • 자료구조 (5)
        • 네트워크 (0)
        • 컴퓨터구조 (11)
      • 면접준비 (0)
        • C++ (0)
        • 운영체제 (0)
        • 자료구조 (0)
      • 프로젝트 (25)
        • [팀프로젝트] The Fourth Descenda.. (5)
        • [개인프로젝트] FPS 구현 맛보기 (5)
        • GetOutOf (15)
      • 기타 (54)
        • [강의] 이득우의 언리얼 프로그래밍 Part1 (10)
        • [강의] 이득우의 언리얼 프로그래밍 Part3 (12)
        • [강의] 소울라이크 개발 A-Z (4)
        • [강의] Udemy-2D (5)
        • [서적] 인생 언리얼5 (4)
        • 스파르타코딩클럽 (15)
        • 객체지향프로그래밍 (2)
        • 컴퓨터회로 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    쉘정렬
    버블정렬
    경북게임잼
    게임개발
    삽입정렬
    게임잼
    자료구조
    알고리즘
    셸정렬
    선택정렬
    참가후기
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Meoyoung's Development Logs
[이득우의 언리얼] 7. 언리얼 C++ 설계 - 인터페이스
상단으로

티스토리툴바