Table of Contents
[!note]
실습은 지난번 프로젝트인UnrealContainer
에 이어서 작성
언리얼 구조체
🔗공식 문서
→ 강의와 똑같은 문서는 사라진것 같음
구조체 사용시 알아둘 정보
- 구조체는 단순한 데이터 타입에 적합하므로
UObjects
와는 다름- 프로젝트 내부에서 보다 복잡한 인터랙션을 하기 위해서는
UObject
또는AActor
서브클래스를 만드는것이 좋음
- 프로젝트 내부에서 보다 복잡한 인터랙션을 하기 위해서는
UStruct
는 리플리케이션용으로 간주되지 않음UProperty
변수는 리플리케이션응으로간주됨
언리얼 구조체 UStruct
- 데이터 저장/전송에 특화된 가벼운 객체
- 대부분
GENERATED_BODY
매크로를 선언해준다.- 리플레션, 직렬화와 같은 유용한 기능을 지원함.
GENERATED_BODY
를 선언한 구조체는UScriptStruct
클래스로 구현됨.- 이 경우 제한적으로 리플렉션을 지원함
- 속성
UPROPERTY
만 선언할 수 있고 함수UFUNCTION
은 선언할 수 없음
- 속성
- 언리얼 엔진의 구조체 이름은 F로 시작함. (엔진이 메모리관리를 해주지 않음)
- 대부분 힘 메모리 할당(포인터 연산)없이 스택 내 데이터로 사용됨.
NewObject
API를 사용할 수 없음
언리얼 리플렉션 관련 계층 구조
- 리플렉션에 관련된 언링러 오브젝트의 계층 구조
객체의 동적 배열 관리를 위한 예제 다이어그램
- 언리얼 오브젝트 학생의 동적 배열 관리 방법
- 언리얼 구조체 학생 정보의 동적 배열 관리 방법
UObject
를 상속받는UStudent
를 컨테이너에 담으면UPROPERTY
매크로를 필수로 붙여줘야 한다.- 예시 코드
MyGameInstance.h
// 값타입이기 때문에 메모리 관리를 할 필요가 없다고 함
TArray<FStudentData> StudentData;
// 헤더에서 언리얼 오브젝트 포인터를 선언할때는 TobjectPtr로 감싸야 함
// 엔진이 자동으로 메모리를 관리할 수 있게 UPROPERTY 매크로를 필수로 붙여줘야 함
UPROPERTY()
TArray<TObjectPtr<class Ustudent>> Students;
TMap
의 구조와 활용
TMap
의 특징
STL map
과TMap
의 비교STL map
의 특징STL map
은STL set
과 동일하게 이진트리로 구성돼있음.- 정렬은 지원하지만, 메모리 구성이 효율적이지 않으며, 데이터 삭제시 재구축이 일어날 수 있음.
- 모든 자료를 순회하는데 적합하진 않음
언리얼 TMap
의 특징- 키,밸류 구성의 튜플(Tuple) 데이터의
TSet
구조로 구현돼있음 - 해시테이블 형태로 구축되어 있어 빠른 검색이 가능
- 동적 배열의 형태로 데이터가 모여있음
- 데이터는 빠르게 순회할 수 있음
- 데이터는 삭제해도 재구축이 일어나지 않음
- 비어있는 데이터가 있을 수 있음
TMultiMap
을 사용하면 중복 데이터를 관리할 수 있음(중복 허용 필요 시 사용)
- 키,밸류 구성의 튜플(Tuple) 데이터의
- 동작 원리는
STL unordered_map
과 유사함 - 키,밸류 쌍이 필요한 자료구조에 광범위하게 사용됨
TMap
의 내부 구조
TSet
을 Pair로 구현한 구조이기때문에 TSet
과 성질이 동일하다.
🔗공식 문서 링크
이 글은 옵시디언에서 마크다운으로 작성되었습니다.
블로그에서는 지원하지 않는 포맷이있어, 보기 불편할 수 있습니다.
'UE5 > 이득우의 언리얼 프로그래밍 공부 노트' 카테고리의 다른 글
[Part1] 13.언리얼 오브젝트 관리 1 - 직렬화 (1) | 2024.03.12 |
---|---|
[Part1] 12.언리얼 엔진의 메모리 관리 (0) | 2024.01.28 |
[Part1] 10.언리얼 컨테이너 라이브러리(1) - Array와 Set (0) | 2023.12.24 |
[Part1] 9.언리얼C++ 설계(3) - 델리게이트 (1) | 2023.12.17 |
[Part1] 8.언리얼C++ 설계(2)-컴포지션 (1) | 2023.11.25 |