언리얼 C++의 핵심, 언리얼 오브젝트
언리얼 C++ 생긴 이유
C++가 생기고, 모던 객체지향 언어 (모던 OOP언어, C++이후 나온 언어들 JAVA, C#)이 생겼는데 C++의 성능적 장점과 모던OOP언어의 생산적 장점 2가지를 잡기 위해서 언리얼에서는 기존 C++ 언어를 좀 더 확장하는 방안으로 객체 지향 설계를 실현했다.
언리얼엔진 객체시스템
UnrealEngine 이 시스템 자체에는 2가지 오브젝트(객체 시스템)가 존재한다.
일반 C++언어에서 사용하는 C++ 오브젝트, 언리얼에서 고안한 생산성이 높아진 언리얼 오브젝트.
1. C++ 오브젝트
- 기존 C++언어의 일반적인 객체 시스템
- 성능적 장점이 존재하지만, 생산적인 측면에서 취약, 메모리를 건들이면 프로젝트 전체가 난감해질 수 있다.
- 사용 용도 : 저수준의 빠른 처리를 위한 기능 구현
- 접두사 F
2. 언리얼 오브젝트
- 기존 C++ 오브젝트에 모던 객체 지향 설계를 위한(C#등의 생산적 장점을 위한) 다양한 기능을 추가
- 사용 용도 : 콘텐츠(게임) 제작에 관련된 복잡한 설계 구현
- 접두사 U
UObject 특징
UObject, 언리얼 오브젝트는 모던 객체 지향 언어의 장점인 생산성을 위해 기존 C++에는 없고, C#에서 많이 본 기능을 추가로 지원하도록 구성되었다.
- CDO (Class Default Object, 클래스 기본 객체)
: 클래스의 기본 값과 타입 정보의 제공, UCLASS() 로 작성 - 리플렉션(Reflection)
: 런타임에서 클래스 정보의 참조 기능 - 인터페이스 (Interface)
: 모던 객체 지향 언어가 제공하는 인터페이스 제공 - 향상된 열거형
- 델리게이트 (Deligate)
: 객체간의 결합을 낮추기 위한 기능 제공 - 가비지 컬렉션 (Garbage Collection)
: 자동 메모리 관리 - 향상된 구조체 (Struct)
: 리플렉션이 가능한 구조체 지원 - 직렬화 (Serialization)
: 객체 정보를 바이트 스트림으로 저장, 전송, 불러들이는 기능
UObject 구성
언리얼엔진에서 MyObject라는 이름의 오브젝트를 만들면, VS에서 cpp와 헤더 파일이 생성된다.
1. #pragma once
: 헤더의 중복선언을 막기 위해 반드시 적는다.
3~4. #include "CoreMinimal.h" #include "UObject/NoExportTypes.h"
: 언리얼 오브젝트를 만들 때 반드시 들어가는 헤더 2가지
5. #include "MyObject.generated.h"
: 내가 만든 오브젝트 = 언리얼 오브젝트일 때, 언리얼 자체에서 매크로들을 넣어둔 헤더파일을 자동으로 만들고 추가한다.
이는, UHT라는 파일에 숨겨져있는데, 고칠 필요도, 삭제해도 다시 생기니 걱정할 필요없다.
7. UCLASS()
: 언리얼 오브젝트임을 명시하기 위해 UCLASS()를 적는다.
8. class UNREALOBJECT_API UMyObject : public UObject
: 먼저, 클래스 이름이 UMyObject이다. 이는 언리얼 오브젝트이기에 접두사U + MyObject로 되었기 때문.
: UNREALOBJECT_API는 내가 만즌 프로젝트+ _API 형태로, 다른 프로젝트에서도 이 오브젝트를 사용할 수 있도록 개방한다는 의미이다. 이걸 없애면 다른 곳에서는 접근할 수 없다.
10. GENERATED_BODY()
: MyObject.generated.h에 선언되어있는 매크로를 사용하겠다는 의미이다.
GENERATED_BODY()는 정의처럼 현재파일, _, 라인정보, BODY정보를 묶어서 하나의 문자열을 만드는데,
이 각각의 현재파일, 라인정보, BODY정보는 MyObject.generated.h에 선언되어있고, 매크로로 지정되어 있다.
즉, GENERATED_BODY()를 사용하므로서 여러 매크로를 사용한다는 의미가 되고, 이는 곧 코드를 만드는데 다양한 클래스를 포함한 언리얼 오브젝트를 만든다는 말이 된다.
'하고싶은거 > Unreal' 카테고리의 다른 글
Part1 07. 언리얼 C++ 설계 : 인터페이스 (0) | 2024.03.09 |
---|---|
Part1 05.06. 언리얼 리플렉션 시스템 (프로퍼티 시스템) (0) | 2024.03.08 |
Part1 03. 기존 C++과 다른 언리얼 C++ (0) | 2024.03.02 |
Part1 02. 언리얼C++ 코딩규칙 (2) | 2024.02.29 |
Part1 01. Hello Unreal! (0) | 2024.02.28 |
#개발 #게임 #일상
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!