
언리얼 엔진과 그 내부 동작 방식에 흥미를 느끼는 프로그래머로서, 저는 소프트웨어 시스템 엔지니어링 배경을 가지고 있습니다. 더 깊이 있는 학습 접근과, 미래의 저를 위해 인사이트를 문서화하는 것을 중요하게 생각합니다.
언리얼 엔진에서 C++ 게임플레이 시스템을 개발하면서 UObject 시스템을 자주 다시 살펴보게 되었습니다.
무언가를 망가뜨리거나 디버거로 코드를 탐색할 때, UClass의 메모리 레이아웃이 저를 혼란스럽게 했고, 그 동작 방식이 궁금했습니다. 처음에는 C++ 지식이 충분하지 않아 시스템 전체를 자신 있게 리버스 엔지니어링할 수 없었고, 리플렉션이나 UObject 시스템에 대해 다른 개발자들에게 질문했습니다. 하지만 대부분의 답변은 깊이가 부족했고, "그냥 그렇게 쓰는 거야"라는 식의 답변이 많았습니다.
그래서 저는 진지하게 자료를 찾기 시작했지만, 북미 쪽에서는 언리얼 엔진 리플렉션 시스템에 대한 심도 있는 글이 많지 않았습니다. 그러던 중 Dazhao의 글을 발견했고, 이 문서의 기반이 되었습니다. 여기에 제가 찾은 다른 글의 내용도 추가하고, 일부는 업데이트 및 보완했습니다. 다만, 원문이 중국어라 오랜 시간에 걸쳐 번역했고, Dazhao의 글에서 다루는 개념을 직접 실험하며 내용을 꼼꼼히 검증했습니다. 그 과정에서 이 주제에 대한 깊은 지식을 얻게 되었고, C++ 개념도 더 많이 배웠습니다. 시스템의 동작 방식을 더 잘 이해하기 위해 추가 학습도 필요했습니다. 이 문서는 복잡한 시스템에 대해 제가 배운 내용을 정리하고, 학습 과정을 기록하기 위해 작성되었습니다. 마지막에 참고한 분들께 깊이 감사드리며, '공유는 배려'라는 마음으로 이 정보를 세상에 남깁니다. 이 자료가 시스템을 구축할 때 참고할 수 있는 유용한 리소스가 되길 바랍니다.