UPROPERTY는 언리얼엔진에서 사용하는 매크로로
변수 위에 붙이면 리플렉션 시스템에 해당 변수를 등록해서 블루프린트에서 인식이 가능하다.
UPROPERTY는 블루프린트 접근,편집 가능, 언리얼 에디터에 노출, 게임 저장,로드, 네트워크 복제 및 가비지 컬렉션 관리하는 역할을 수행한다.
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Stats")
EditAnywhere 에디터 어디서든 편집가능
BlueprintreadWrite 블루프린트에서 읽고 쓰고 가능
Category 에디터 상에서 분류되는 카테고리
이러한 방식으로 선언한다.
하지만 멤버 변수의 접근 지정자(private, protected, public)에 따라 프로퍼티가 블루프린트에 보여지는 여부가 달라진다.
public을 제외한 나머지(private, protected)에 UPROPERTY를 선언하게 되면 블루프린트에서 보이지 않는다.
보통 private, protected + UPROPERTY 조합을 사용하는데 따라오는 메타데이터가 있는데 바로 meta = (AllowPrivateAccess = "true") 이다
해당 메타 데이터값을 통해서 private, protected 접근지정자로 선언된 변수여도 블루프린트에서 읽고 쓰고 보이게 하기 위해서 컴파일러에게 접근 허용을 선언하는 역할을 수행한다.
이러한 방식으로 위의 조합을 사용하는 이유는,
1. 데이터를 숨기면서 블루프린트(에디터)에 보여지기 위함이다. C++ 스크립트에서는 변수 접근을 방지하고 블루프린트에서 해당 변수값을 식별하고 사용하는 목적을 지닌다.
2. 코드의 일관성을 위해 외부에서 멤버 변수의 접근을 막는 캡슐화를 유지하기 위함이다.
3. 외부에 변수값 노출은 필요없고 가비지 컬렉션(GC)에 추적되게 하여 메모리를 유지하고 누수를 방지한다.