인터페이스 사용 이유
- 어떤 객체가 반드시 구현해야할 행동을 지정하는데 활용
- 다형성, 의존성 분리를 위해 사용한다.
특징
- 인터페이스 생성시 두 개의 클래스가 생성
- U로 시작하는 타입클래스
- I로 시작하는 인터페이스 클래스 - 실질 클래스 구현하는 곳
C++ 인터페이스 vs C# 인터페이스
- c# 에서는 추상 타입으로만 선언이 가능하지만 C++ 인터페이스는 선언하지 않고 로직을 구현할 수 있다.
- 다만 구현하였을때 장점도 있지만 복잡해 질 수 있으므로 구현을 할예정이라면 차라리 그냥 일반 클래스를 상속받는것이 더 좋아보인다(굉장히 주관적)
컴포지션
- is A 말고 Has A 를 구현하는 방법
- 거대한 클래스를 효과적으로 설계하는데 유용하게 사용 가능
- 언리얼 엔진에서 컴포지션 구현방법
- CDO (클래스 기본 객체) 에서 생성하는 방법.
- 언리얼 오브젝트에 다른 언리얼 오브젝트를 조합할 때 다음의 선택지
- 방법 1: CDO에 미리 언리얼 오브젝트를 생성해 조합한다. - 생성자에 포함 CreateDefaultSubobject - 필수적일 때
- 방법 2: 빈 포인터만 넣고 런타임에서 언리얼 오브젝트를 생성해 조합한다. - NewObject - 필수적이지 않을 때
- 언리얼 오브젝트에 다른 언리얼 오브젝트를 조합할 때 다음의 선택지
- 언리얼 오브젝트를 생성할 때 컴포지션 정보를 구축할 수 있다.
- 내가 소유한 오브젝트 - subObject
- 나를 소유한 오브젝트 - Outer
- CDO (클래스 기본 객체) 에서 생성하는 방법.
- 한켠 작은 팁 : 메타정보설정
> 메타 정보를 이용하면 좀더 편하게 블루프린트에서 사용 가능하다.
- 메타정보 쓰기 예시
UENUM()
enum class ECardType: uint8
{
Student = 1 UMETA(DisplayName = "For Student"), // <- DisplayName은 에디터에서 보여지는 이름
Teacher = 2 UMETA(DisplayName = "For Teacher"),
Staff = 3 UMETA(DisplayName = "For Staff"),
Invalid = 4,
};
const UEnum* cardEnumtype = FindObject<UEnum>(nullptr, TEXT("/Script/UnrealComposition.ECardType"));
if(cardEnumtype)
{
FString CardMetaData = cardEnumtype->GetDisplayNameTextByIndex(static_cast<int32>(cardType)).ToString();
UE_LOG(LogTemp, Log, TEXT("Person : %s"), *CardMetaData) ;
}
반응형
'엔진공부 > 언리얼 공부' 카테고리의 다른 글
[언리얼 공부] 언리얼 리플렉션 시스템 (0) | 2024.08.21 |
---|---|
[언리얼 공부] 언리얼 오브젝트 소개 (0) | 2024.08.19 |
[언리얼 공부] 언리얼 C++ 기본타입과 문자열 (0) | 2024.08.15 |