실습 예제
- Person 부모 클래스
- Student, Teacher 자식 클래스
- DoLesson 가상 함수
- Student는 수업 듣기
- Teacher는 수업 가르치기
- generated.h 파일을 가장 밑에 include 하는 것이 원칙
- cpp 파일 include 순서도 해당 언리얼 오브젝트에 선언된 헤더가 가장 위쪽에 위치
- 클래스명::StaticClass()
- 객체->GetClass()
- FindPropertyByName
- 해당 클래스의 UClass로부터 FProperty를 찾아옴
- 없으면 nullptr 반환
- GetValue_InContainer
- (void const* InContainer, void* OutValue)
- 해당 Property로부터 입력된 객체가 가지고 있는 해당 값을 가져옴
- SetValue_InContainer
- (void OutContainer, const void InValue)
- 해당 Property로부터 해당 객체에 값을 입력함
- FindFunctionByName
- 해당 클래스의 UClass로부터 UFunction을 찾아옴
- 없으면 nullptr 반환
- ProcessEvent
- 객체로부터 UFunction을 입력해 함수를 호출
마무리
- 리플렉션 시스템을 사용해 언리얼 오브젝트의 특정 속성과 함수를 이름으로 검색할 수 있음
- 리플렉션 시스템을 사용해 접근 지시자와 무관하게 값을 설정할 수 있음
- 리플렉션 시스템을 사용해 언리얼 오브젝트의 함수를 호출할 수 있음
접근 지시자와 리플렉션 시스템에 관한 질문
https://www.inflearn.com/questions/1018748/%EC%A0%91%EA%B7%BC%EC%A7%80%EC%8B%9C%EC%9E%90%EC%99%80-%EB%A6%AC%ED%94%8C%EB%A0%89%EC%85%98-%EC%8B%9C%EC%8A%A4%ED%85%9C
- 한정 접근 지시자 규칙이 뚫림
- 모든 개발자가 프로그래머는 아니기 때문에 생산성의 문제
- C++보다 블루프린트 시스템에 유용
- Find는 O(n)이 디폴트
- 하나의 객체에 그렇게 많은 속성이 있지 않아서 그런 듯
- 언리얼은 자유로운 엔진이기 때문에 필요하다면 직접 구현해서 사용하면 됨