[TIL 46일차] <언리얼 C++> 리플렉션 시스템
2026. 4. 9. 19:54ㆍTIL
리플렉션 (Reflection) ?
언리얼에서 리플렉션 시스템은 C++ 클래스의 변수 및 함수 정보를 엔진 내부의 메타데이터 형태로 저장하고, 이를 에디터나 블루 프린트에서 활용할 수 있게 만들어주는 기술이다.
- C++ 클래스에 있는 여러 변수와 함수 등을 Reflection해 에디터와 블루프린트에서 직접 설정, 호출이 가능하도록 한다.
- C++ 로직의 뼈대를 디자이너나 다른 팀원들이 에디터에서 직관적으로 조정할 수 있다.
- 매개변수를 코드에서만 변경하는 것이 아닌, 에디터에서 바로 조정하여 반복 테스트를 빠르게 진행할 수 있다.
리플렉션 기본 틀

이건 클래스의 헤더이다. 여기서 리플렉션과 관련된 매크로를 확인해보려고 한다.
- #include "MoveItem.generated.h"
- 언리얼 엔진이 자동 생성하는 헤더파일이다. 클래스 내에 리플렉션 및 엔진 통합에 필요한 코드가 들어있다.
- 반드시 헤더 파일의 가장 아래 부분에 위치해야 한다. 그렇지 않으면 빌드 에러가 발생할 위험이 있다.
- UCLASS()
- 이 매크로가 적용되어 있는 클래스를 엔진의 리플렉션 시스템에 등록한다는 의미이다.
- 이 매크로가 있어야 블루프린트 등 에디터 차원에서 이 클래스를 인식하고 사용할 수 있다.
- GENERATED_BODY()
- 언리얼의 코드 생성 도구가 사용하는 코드를 삽입하는 역할을 한다.
- 클래스 내부에 필요한 리플렉션 정보를 자동으로 생성해 준다.
- UPROPERTY()
- 이 매크로가 적용되어 있는 변수를 엔진의 리플렉션 시스템에 등록한다.
UCLASS()
UCLASS() 매크로는 클래스를 리플렉션 시스템에 등록하는 매크로이다. 괄호 안에 몇 가지 지정자를 설정할 수 있다.
기본 동작
아무 옵션을 주지 않으면 블루프린트에서 상속이 가능, 변수로 참조가 가능한 형태로 등록됨.
주요 옵션
- Blueprintable
- 블루프린트에서 상속 가능한 클래스로 만든다.
- NotBlueprintable
- 블루프린트에서 상속이 불가능하도록 한다.
- BlueprintType
- 블루프린트에서 변수나 참조로 사용할 수 있게 한다.
- 위 옵션이 없이 이 옵션만 있다면, (ex. UCLASS(BlueprintType)) 상속은 허용되지 않고 참조만 가능하다.
이 지정자들을 조합해 클래스와 블루프린트가 상호작용하는 방식을 명시할 수 있다.
UPROPERTY()
- 편집 범위 지정자
- VisibleAnywhere : 읽기 전용으로 표시되며, 수정이 불가능하다.
- EditAnywhere : 클래스 기본값과 인스턴스에서 모두 수정 가능하다.
- EditDefaultsOnly : 클래스 기본값에서만 수정 가능하다.
- EditInstanceOnly : 인스턴스에서만 수정 가능하다.
- 블루프린트 접근 지정자
- BlueprintReadWrite : 블루프린트 그래프에서 Getter/Setter로 값을 읽거나 쓸 수 있다.
- BlueprintReadOnly : 블루프린트 그래프에서 Getter만 쓸 수 있다.
- 카테고리 지정자
- 디테일 패널에서 이 변수는 Rotation 범주 아래에 표시된다.
- 여러 변수를 비슷한 카테고리로 묶으면 세부 정보 패널에서 깔끔하게 정리할 수 있다.
- Category = "내용"
- 메타 옵션 지정자
- meta=(ClampMin="0.0") : 에디터에서 변수 입력시 최소값을 제한할 수 있다.
- meta=(AllowPrivateAccess="true") : 해당 멤버가 private로 선언되어 있어도, 에디터나 블루프린트에서 접근할 수 있도록 허용한다.
- 아무 지정자도 선언하지 않으면?
- 엔진 리플렉션 시스템에는 등록되지만, 에디터나 블루프린트에 노출되지 않는다.
- 리플렉션에 등록만 되어 있어도 가비지 컬렉션(메모리 관리)과 직렬화(세이브 / 로드) 같은 엔진 내부 기능이 작동할 수 있다.

이런식으로 Rotation Speed를 변경할 수 있다.
함수 리플렉션 UFUNGTION()
주요 지정자
- 블루프린트 관련 지정자
- BlueprintCallable
- 블루프린트 이벤트 그래프에서 호출 가능한 함수로 만든다.
- BlueprintPure
- Getter 역할만 수행한다.
- BlueprintImplementableEvent
- 함수의 선언만 C++에 있고, 구현은 블루프린트 안에서 하도록 한다. 코드에선 함수의 이름만 정의하고 실제 동작은 블루프린트 이벤트 그래프 안에서 이벤트 노드처럼 구현된다.
- BlueprintCallable
UFUNCTION()만 사용한다면?
UPROPERTY()와 마찬가지로, 함수가 언리얼 리플렉션에 등록은 되지만, 블루프린트에 노출되진 않는다.
리플렉션 등록해보기

BlueprintImplementableEvent를 사용했는데, 블루프린트에서 구현되지 않았다고 나옴. 즉, 블루프린트에서 구현해야함.

이런식으로 Rotate는 블루프린트에서 함수로 구현할 수 있고, GetRotationSpeed는 Getter로 사용할 수 있다.
'TIL' 카테고리의 다른 글
| < 언리얼 C++ > GameMode (0) | 2026.04.12 |
|---|---|
| < 언리얼 C++ > 회전 발판과 움직이는 장애물 만들기 (0) | 2026.04.11 |
| [TIL 45일차] <언리얼 C++> 액터의 라이프 사이클 (0) | 2026.04.08 |
| [TIL 44일차]언리얼C++ 액터 기본세팅 (1) | 2026.04.07 |
| Unreal Engine C++ (1) | 2026.03.27 |