개요
이번 강의에서는 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 |