본문 바로가기
Unreal/Script

Header 파일에 붙는 UCLASS란 무엇일까?

by Pretty Garbage 2018. 6. 30.

스크립트를 생성하면 유니티와는 다르게

 

헤더파일과 cpp 파일을 볼 수 있는데...

 

대충 보니 BeginPlay() 함수는 유니티의 OnStart(); 와 같은 기능을

하는 것 같고

 

Tick()은 Update(); 함수와 같은 기능을 할 것이다. 라는 예상을 하게 해준다.

 

근데...

 

제일 위에 붙은 UCLASS() 이녀석의 정체는 무얼까????

 

 

 

언리얼 공식 API에서는 UCLASS 매크로라고 명명하며

 

UObject (언리얼 오브젝트인듯)에게 자신의 언리얼에서 기반으로 삼은 유형에 대해 설명해주는 UCLASS로의 레퍼런스를 넘겨준다.

 

라고 설명 되어져있습니다.

 

딱히 감이 안옵니다.

 

UCLASS는 언리얼 오브젝트에 대한 계층구조, 정보, 멤버 변수, 함수 등에 대한 모든 정보를 '기록'하고 있습니다.

 

즉, UCLASS 매크로가 선언이되어야 스크립트에 접근해 정보를 찾아 열람하고 사용할 수 있다는 말이 되겠군요.

 

 

자바나 C#의 리플렉션(Reflection)과 유사한 기능이라고 합니다.

 

해당 오브젝트의 Type객체, 멤버 목록, 메소드 목록, 필드 목록등을 읽어서 보여주는 즉 객체의 정보를 조사하거나 인스턴스를 생성하거나 접근하거나 등등을 가능하게 끔한다고 합니다. C++에서는 이러한 기능이 없기때문에 UCLASS라는 것을 이용해서 만드는 것 같은데요.

 

이게 대체 언리얼에서 무슨 의미냐? 언리얼은 오브젝트를 생성할 때마다 매번 초기화하지 않고 기본 인스턴스를 만들어 놓고 복제하는 방식의 매커니즘으로 구성되어 있습니다.

 

단순하고 심플한 프로젝트라면 이러한 매커니즘이 불필요 할 수 있습니다만 수많은 오브젝트들이 로드가 될 경우

캐릭터를 처음부터 새로 만들고 속성값을 바꾸고 로드하는 것보다는 이미 만들어진 기성품에 속성값만 바꾸고 로드하는 것이 훨씬 빠르겠지요.

 

 

위와 같은 모듈로 관리가 되어집니다.

CDO는 (Class Default Object) 입니다. 위에 말한 기성품이라고 보시면 됩니다.

 

이러한 오브젝트는 언리얼 엔진에서 항상 모듈단위로 관리되어진다고 합니다.

 

 

모듈 내 언리얼 오브젝트의 진행은

 

모듈을 로딩 -> 모듈에 속한 UObject의 클래스 정보 등록 -> 각 클래스의 정보와 CDO객체 생성 -> 언리얼 오브젝트의 생성자를 호출해 CDO 생성

 

의 순서로 진행되어진다고 합니다.

 

 

 

제가 이해하고 있는게 맞다면 언리얼 오브젝트에서 클래스를 선언하게되면 UCLASS가 만들어지게 되고 UCLASS는 오브젝트의 구성을 기록하고 관리하게 됩니다. 그래서 빌드를 하게 되면 이 UCLASS는 오브젝트의 인스턴스를 만들게되고 새로운 오브젝트를 만들때마다 정보가 전달되어지고 관리되어지는 시스템이라고 이해하면 될 것 같습니다.

 

 

 

 

 

잘못된 이해나 정보라면 댓글달아주시면 큰 도움이 되겠습니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'Unreal > Script' 카테고리의 다른 글

언리얼 모듈 만들기  (0) 2018.07.08
C++ 11 및 최신 언어 문법.  (0) 2018.07.05
UPROPERTY란 무엇일까?  (0) 2018.07.01