프로그래밍 공부
작성일
2024. 1. 8. 14:16
작성자
WDmil
728x90

리플렉션[Reflection]

프로그램이 실행시간에 자기자신을 조사하는 기능이다.

 

이러한 기능은

에디터의 디테일 패널, 시리얼라이제이션, 가비지콜렉션, 네트워크 리플리케이션, 블루프린트/C++ 커뮤니케이션 등 다수 시스템에 탑재된 기능이다.

 

그러나, C++자체에서는 리플렉션 을 지원하지 않는다.

 

언리얼에서는 자체적으로 C++클래스, 구조체, 함수, 멤버 변수, 열거형 관련 정보를 수집, 질의 , 조작하는 별도의 시스템이 구축되어있다.

 

이러한 리플렉션은, '프로퍼티 시스템' 이라고 부르는데, 리플렉션은 그래픽용어이기 때문.


쉽게 이해해보자.

 

우리가 C++에서 객체를 정의 / 생성하고 값을 부여할 때 에는 런타임 전에 수정하고. 런타임 중에 해당 객체를 수정하기 위해서는 컴파일을 종료하고. 내부 코드를 수정해야 한다.

 

이러한 방식은 객체의 동작종료 후에 값을 수정해야 함으로써 매우 귀찮고 번거로운 과정이다.

 

그럼으로. 런타임중. 코드를 실행중에 객체의 변수나 함수를 동적으로 수정, 조사할 수 있도록 하는 기능을 이야기 한다.

 

객체의 내부구조를 확인하고, 속성값을 변경하거나 함수를 호출할 수 있도록 해주는것 이다.

 


다르게 생각해보기

 

어떠한 객체를 생성할 때, 객체의 함수나 변수를 해당 객체에서 생성하되, 동적으로 생성하고. 해당 동적변수, 함수를 참조할 수 있는 메크로를 생성한 다음.

 

해당 메크로를 다른곳에서 재정의하고 링크된 포인터를 수정하도록 하면. 어떤 객체가 동작중에 그 변수를 수정할 수 있도록 만들 수 있지 않을까?

 

라고 설계해보자.

 

C++에서는 자체적을 이렇게 변수를 외부에서 수정할 수 있는 기능을 지원하지 않음으로 우리가 따로 만들어서 생성하고 조정해주어야 한다.

 

우리가 Class를 생성하고 내부 변수를 public으로 만든 다음.

 

해당 객체에서 *void Get() 형태로 받아와서 사용한다고 이해하면 된다.

 

모든 객체는 자신이 변수를 가지고 있다고 생각하지만, 사실 소유권은 외부에 있거나,

 

아니면 소유권을 자신으로하고 생성하지만, 프로퍼티 메크로가 해당 변수를 동적으로 참조할 수 있는 주소값을 가지고 수정할 수 있는 인터페이스를 User에게 제공한다.

 

라고 생각하면 된다.

 

즉, 객체 -> 프로퍼티 간의 일방적인 데이터제공이 항상 이루어진다 라고 생각하며 된다.

 

그러나, 이러한 생성과 동작방식은 변수를 가지고 있는 객체가. 허가를 해주어야 가능하다.


한줄요약

인터페이스에서 해당 엑터를 런타임중에 동적으로 수정할 수 있도록 제공하는 기능.

728x90

'언리얼엔진 5 > 언리얼 용어 정리' 카테고리의 다른 글

언리얼 스트링 처리  (0) 2024.01.12
블렌드 스페이스(Blend Space)  (0) 2024.01.10
언리얼 계층구조  (0) 2024.01.08
언리얼 리플리케이션(Replication)  (0) 2024.01.08