언리얼로 개발을 하면서 검색을 하다가 다른 사람은 UPROPERTY()와 UFUCTION() 매크로를 사용한 것을 보았다.
내 코드는 저 두가지 매크로를 사용하지 않았지만 아무런 문제는 없었다.
그렇다면 저 매크로들은 왜 사용하는 것일까?
결과부터 말하자면 언리얼의 리플렉션 시스템에 속성과 함수를 노출시키기 위해서 사용한다고 한다.
이 매크로는 언리얼 엔진이 C++ 코드와 에디터, 블루프린트 등 다른 시스템 간의 상호작용을 원활하게 할 수 있도록 중요한 역할을 한다.
그럼 리플렉션 시스템은 뭘까?
언리얼 엔진에서의 리플렉션 시스템
개발자들이 C++ 코드와 언리얼 엔진의 다양한 시스템(에디터, 블루프린트, 직렬화, 네트워킹 등) 간의 상호작용할 수 있도록 지원하는 메커니즘이다.
런타임 또는 컴파일 타임에 객체의 속성과 메서드에 대한 정보를 동적으로 접근하고 조작할 수 있게 해준다.
주로 UPROPERTY()와 UFUNCTION() 같은 매크로를 통해 구현되며, 언리얼 헤더 툴(UHT)에 의해 처리된다.
자세한 내용은 언리얼 공식 문서에 설명되어있으니 참고하면 좋을 것 같다.
https://dev.epicgames.com/documentation/ko-kr/unreal-engine/reflection-system-in-unreal-engine
UPROPERTY()
- 클래스의 멤버 변수를 언리얼 에디터 내에 노출시킨다.
- 디자이너나 개발자가 에디터 상에서 직접 값을 수정할 수 있도록 한다.
- 블루프린트에서 해당 속성에 대해 접근거나 수정함으로써 블루프린트(시각적 스크립팅)과의 통합이 가능하다.
- 게임 데이터를 저장하거나 불러올 때, 자동으로 직렬화되어 저장한다.
- 언리얼의 가비지 컬렉션 시스템이 메모리를 효율적으로 관리할 수 있도록 도와준다
(UPROPERTY로 선언된 포인터는 자동으로 참조 카운트가 관리된다)
- 매크로 안에 다양한 메타데이터를 지정하여 속성의 동작 방식을 세부적으로 제어가능하다.
예를 들면 EditAnywhere, BlueprintReadWrite 등의 키워드를 사용해 편집 가능 여부나 블루프린트 접근성을 설정할 수 있다.
UFUNCTION()
- 클래스의 멤버 함수를 언리얼 에디터나 블루프린트에서 호출할 수 있게 한다.
- 블루프린트 내에서 해당 함수를 노드로 사용해 시각적으로 로직을 구성할 수 있다.
- 네트워크 동작 방식을 정의해(Server, Client, NetMulticast 등) 네트워크 함수를 호출할 수 있다.
- 특정 이벤트에 함수를 바인딩하여 이벤트가 발생했을 때, 자동으로 함수 호출이 가능하다.
- 메타데이터를 지정하여 함수의 동작 방식을 세부적으로 제어할 수 있다.
마지막 말
UPROPERTY()와 UFUNCTION()은 언리얼 헤더 툴이 올바르게 코드를 파싱하고 필요한 리플렉션 코드를 생성할 수 있게 도와준다.
언리얼 엔진에서 해당 매크로를 사용하면 개발자가 작성한 코드가 엔진의 다양한 기능과 원활하게 통합되어 개발 과정을 유연하고 효율적으로 가져갈 수 있을 것이다!
'Unreal Engine' 카테고리의 다른 글
[ UE ] 퍼즐스테이지 설계 및 구상 (0) | 2025.01.24 |
---|---|
[ UE, C++ ] 언리얼 엔진의 라이플 사이클 및 액터 생성 (0) | 2025.01.23 |
[ UE ] C++ 코드로 RootComponent와 StaticMesh 생성하기 (0) | 2025.01.22 |
[ UE ] 언리얼 엔진 프로젝트 구조 및 빌드 방법 (+꿀팁) (0) | 2025.01.20 |
[UE5] Unreal 인터페이스 살펴보기 (0) | 2024.12.20 |