언리얼 엔진에서 구조체는 데이터의 집합을 효율적으로 관리하고, 블루프린트와 C++ 모두에서 자주 활용되는 핵심 자료형입니다. 효율적으로 사용하는 방법은 다음과 같습니다.
목차
Toggle1. 구조체 설계 시 주의점
- 간단한 데이터에 적합하게 설계
구조체는 값 타입으로 처리되며, 복잡한 상호작용이나 동작이 필요한 경우에는 UObject 또는 AActor 기반 클래스를 사용하는 것이 더 적합합니다. - UPROPERTY 매크로 적극 활용
구조체의 멤버 변수에는 반드시UPROPERTY
매크로를 붙여야 언리얼 엔진의 가비지 컬렉션(GC)과 에디터 기능(예: 디테일 창 노출, 블루프린트 노출 등)을 제대로 활용할 수 있습니다. - BlueprintType 지정자 사용
구조체에BlueprintType
지정자를 추가하면 블루프린트에서 해당 구조체를 변수 타입 등으로 사용할 수 있습니다.
2. 블루프린트에서 구조체 활용 팁
- 구조체 핀 분할(Split Struct Pin)과 재결합
블루프린트 노드에서 구조체 핀을 우클릭하여 ‘구조체 핀 분할’을 선택하면 구조체의 각 멤버에 개별적으로 접근할 수 있습니다. 필요에 따라 ‘구조체 핀 재결합’으로 다시 합칠 수 있습니다. - Break/Make Struct 노드 적극 사용
- Break Struct: 구조체를 개별 멤버로 분해해 사용할 때 편리합니다.
- Make Struct: 여러 값을 한 번에 구조체로 묶어 반환할 때 사용합니다.
- Set Members in Struct 노드 활용
구조체의 일부 멤버만 변경하고 싶을 때, 전체 구조체를 새로 만들 필요 없이 ‘Set Members in Struct’ 노드를 사용해 원하는 멤버만 손쉽게 수정할 수 있습니다.
3. 데이터 테이블과의 연계
- FTableRowBase 상속
구조체를 데이터 테이블의 행으로 사용하려면 FTableRowBase를 상속받아 정의하면, 대량의 게임 데이터를 테이블로 관리하고 쉽게 불러올 수 있습니다.
4. 메모리 관리 및 포인터 사용 주의
- UObject 포인터 멤버는 UPROPERTY 필수
구조체 멤버로 UObject*를 사용할 때는 반드시 UPROPERTY를 붙여야 언리얼 엔진의 메모리 관리와 GC가 제대로 동작합니다. - 깊은 복사/얕은 복사 문제 주의
구조체 내부에 포인터를 사용할 경우, 복사 시 얕은 복사로 인해 의도치 않은 문제가 발생할 수 있으니 주의해야 합니다4.
5. 기타 실용 팁
- 구조체는 값 타입
언리얼 엔진에서 구조체는 값 타입으로 복사·전달됩니다. 크기가 크거나 자주 변경되는 데이터는 클래스(UObject)로 설계하는 것이 효율적입니다. - 컨테이너와 함께 사용
TArray, TMap 등 컨테이너와 구조체를 조합하면 복잡한 데이터도 체계적으로 관리할 수 있습니다.
정리
- 구조체는 단순 데이터 묶음에 적합하며, UPROPERTY와 BlueprintType 지정자를 적극 활용합니다.
- 블루프린트에서는 핀 분할/재결합, Break/Make/Set Members in Struct 노드로 멤버 데이터에 유연하게 접근합니다.
- 데이터 테이블, 컨테이너와 연계해 대량의 데이터도 효율적으로 관리할 수 있습니다.
- 포인터 멤버, 메모리 관리, 값 타입 특성에 주의합니다.
이러한 팁을 활용하면 언리얼 엔진에서 구조체를 더욱 안전하고 효율적으로 사용할 수 있습니다.