게임 엔진/Unreal
[Unreal Engine] Object
Henzee
2025. 6. 15. 00:33
1. Unreal Object
1) 모던 객체 지향 설계 원칙
- 디자인 패턴을 필두로 안정적인 설계 방법이 연구됨
- 유지보수와 유연함, 확장성 향상을 위한 객체 지향 프로그래밍 원칭 (SOLID)
- Single responsibility principle: 하나의 클래스는 하나의 책임만 가져야 한다.
- Open/closed principle: 클래스 설계를 변경하지 않고 동작을 확장할 수 있어야 한다.
- Liskov substitution principle: 자식 클래스는 부모 클래스를 대체 사용할 수 있어야 한다.
- Interface segregation principle: 작고 명확한 인터페이스들로 분리해 관리해야 한다.
- Dependency inversion principle: 구현을 배제시킨 상위 정책을 바라보며 설계해야 한다.
- 후발 언어(C#, Java) 등이 보완한 새로운 기능
- 인터페이스(Interface): 객체 설계의 틀을 제공하는 추상 클래스
- 리플렉션(Reflection): 런타임에서 객체의 구조를 파악하고 객체에 메타 데이터를 부여
- 델리게이트(Delegate): 프로그램에서 발생한 이벤트를 다수의 객체에 효과적으로 전달하는데 활용
→ 게임 규모가 대형화되면서 모던 객체 지향 설계 도입이 필요해짐
2) 언리얼 오브젝트

- 언리얼 엔진이 설계한 새로운 시스템의 단위: 오브젝트(객체)
- 기존 C++ 오브젝트에 모던 객체 지향 설계를 위해 다양한 기능을 추가한 오브젝트
- 일반 C++ 오브젝트와 언리얼 오브젝트 두 객체를 모두 사용 가능
- 구분을 위해 일반 C++ 오브젝트는 F, 언리얼 오브젝트는 U를 접두사로 사용
- 각 오브젝트의 사용 용도
- C++ 오브젝트: 저수준의 빠른 처리를 위한 기능 구현에 사용
- 언리얼 오브젝트: 콘텐츠 제작에 관련된 복잡한 설계 구현에 사용
- 매크로 및 API
- UCLASS(): 언리얼 오브젝트로 지정하기 위해 사용하는 매크로, CDO(Class Default Object)를 하나 유지하는 기능
- NewObject<class>(): 언리얼 오브젝트 생성을 위한 함수
3) 언리얼 오브젝트의 특징
- 클래스 기본 객체(CDO, Class Default Object): 클래스의 기본값과 타입 정보 제공
- 리플렉션(Reflection): 런타임에서 클래스 정보 참조 기능
- 인터페이스(Interface): 모던 객체 지향 언어가 제공하는 인터페이스의 제공
- 향상된 열거형
- 델리게이트(Delegate): 객체 간의 결합을 낮출 수 있는 델리게이트 기능 제공
- 가비지 컬렉션(Garbage Collection): 자동 메모리 관리
- 향상된 구조체(Struct): 리플렉션이 가능한 구조체 지원
- 직렬화(Serialization): 객체 정보를 바이트 스트림으로 저장, 전송, 로드하는 기능
2. Unreal Object 생성
1) C++ 클래스 생성


2) Object Class 살펴보기

- 언리얼 오브젝트가 되기 위해 기본적으로 포함해야 하는 헤더(위에서부터 두개)
- 객체이름.generated.h: 프로젝트 폴더 내 Intermediate > Build > Win64 > UnrealEditor > Inc > ProjectName > UHT 경로에 존재, Unreal Header Tool(UHT)에 의해 빌드 시 생성됨

- ProjectName_API: 해당 오브젝트가 다른 모듈에서도 사용할 수 있도록 지정
- GENERATED_BODY(): generated.h에 있는 헤더 파일을 사용하기 위해 선언