일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 게임 개발
- Unity #Indie Game
- DP
- 유스케이스
- MAC
- Security
- RBAC
- 배경 그림
- pdlc
- dirty cow
- 언리얼엔진
- 메카님
- Race condition
- sampling theory
- Double free
- ret2libc
- 유니티
- dtft
- 게임개발
- 운영체제
- TSet
- stride
- MLFQ
- Rr
- AINCAA
- frequency-domain spectrum analysis
- DSP
- linear difference equation
- STCF
- CTF
Archives
- Today
- Total
다양한 기록
[UE] Interface (인터페이스) 본문
인터페이스
- 객체가 반드시 구현해야 할 행동을 지정하는데 활용
- 다형성의 구현, 의존성이 분리된 설계에 유용
언리얼 c++인터페이스
인터페이스 생성 시 두 개의 클래스 생성..
- U로 시작하는 타입 클래스 (클래스 타입 정보 제공)
- I로 시작하는 인터페이스 클래스
객체 설계 => I 인터페이스 클래스 사용
- U타입 클래스에서 작업 안함
* C++기반이라, 클래스로 인터페이스 구현해서 인터페이스에도 구현이 가능함
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "UObject/Interface.h"
#include "LessonInterface.generated.h"
// This class does not need to be modified.
UINTERFACE(MinimalAPI)
class ULessonInterface : public UInterface
{
GENERATED_BODY()
};
/**
*
*/
class UNREALINTERFACE_API ILessonInterface
{
GENERATED_BODY()
// Add interface functions to this class. This is the class that will be inherited to implement this interface.
public:
virtual void DoLesson()
{
UE_LOG(LogTemp, Log, TEXT("수업에 입장합니다."));
}
};
DoLesson은 = 0; 으로 순수 가상 함수를 지정해도 되는데, 저렇게 기본 구현을 넣는게 가능함
// Fill out your copyright notice in the Description page of Project Settings.
#include "Student.h"
UStudent::UStudent()
{
Name = TEXT("김학생");
}
void UStudent::DoLesson()
{
ILessonInterface::DoLesson();
UE_LOG(LogTemp, Log, TEXT("%s님은 공부합니다"), *Name);
}
C++는 다중 상속을 지원하긴 하는데, Super 호출 시 Person을 뜻해서
위처럼 ILessonInterface:: 같은 방식으로 접근 필요
// Fill out your copyright notice in the Description page of Project Settings.
#include "MyGameInstance.h"
#include "Student.h"
#include "Teacher.h"
#include "Staff.h"
UMyGameInstance::UMyGameInstance()
{
// CDO에 저장됨
// CDO를 고치는, 생성자를 바꾸는 경우에도 에디터 다시 켜줘야 함
// 에디터 켜진 이후에 수정하면 인지 못함
SchoolName = TEXT("기본학교");
}
void UMyGameInstance::Init()
{
Super:: Init();
TArray<UPerson*> Persons = { NewObject<UStudent>(), NewObject<UTeacher>(), NewObject<UStaff>() };
UE_LOG(LogTemp, Log, TEXT("=================================="));
for (const auto Person : Persons)
{
UE_LOG(LogTemp, Log, TEXT("이름: %s"), *Person->GetName());
}
UE_LOG(LogTemp, Log, TEXT("=================================="));
for (const auto Person : Persons)
{
ILessonInterface* LessonInterface = Cast<ILessonInterface>(Person);
if ( LessonInterface )
{
UE_LOG(LogTemp, Log, TEXT("%s님은 수업에 참여할 수 있습니다."), *Person->GetName());
LessonInterface->DoLesson();
}
else
{
UE_LOG(LogTemp, Log, TEXT("%s님은 수업에 참여할 수 없습니다."), *Person->GetName());
}
}
UE_LOG(LogTemp, Log, TEXT("=================================="));
}
Person을 타입 캐스팅해서 ILessonInterface를 얻는데 성공하는지, 안하는지를 구분
Cast<ClassName>( Object )
값이 널이면 ILessonInterface가 없는 거
실행 시 위처럼 나옴
'언리얼 엔진 > Unreal C++' 카테고리의 다른 글
[UE] Delegate (델리게이트) / 발행 구독 패턴 (0) | 2024.12.26 |
---|---|
[UE] Composition (컴포지션) (0) | 2024.12.22 |
[UE] 언리얼 오브젝트 리플렉션 시스템 (0) | 2024.12.18 |
[UE] 언리얼 오브젝트 기초 (0) | 2024.12.18 |
[UE] 언리얼 C++ 코딩 규칙 (0) | 2024.10.30 |