해결된 질문
작성
·
406
3
안녕하세요 강의 잘 시청하고 있습니다.
한 가지 의문이 있어 글을 남깁니다.
리플렉션 시스템의 장점은 정말 강력하다고 생각합니다만, 반대로 걱정되는 부분도 있습니다.
첫번째는
일반적으로 어떤 속성의 값을 수정할 때나 참조할 때는한정된 접근 지시자를 사용하여 get, set 하는 것이 정석적으로 사용되어 왔다고 생각합니다. 리플렉션 시스템을 사용하여 접근지시자를 무시하게 할 수 있다고 하면, 장기적으로 봤을 때 문제점이 있을거라 생각합니다만, 혹시 간단한 사례같은 것이 존재할까요?
두번째는
Find~ 라는 네이밍에서 유추하건대 해당 클래스내의 모든 UProperty나, UFunction중 일치하는 것을 찾을 때까지 탐색하는 시간이 걸릴 것이라 생각합니다만 비용적인 측면에서는 실제로 어떠한지요?
답변 2
0
0
네 리플렉션 기능으로 인해 한정 접근 지시자 규칙이 뚫리지만 이는 어쩔 수 없는 부분입니다.
다만 방대한 게임 시스템에서 C++의 한정 접근 지시자 규칙을 고집한다면, 모든 개발에 참여하는 사람이 프로그래머가 아니기에 생산성 또한 떨어질 수 밖에 없을 겁니다.
사실 이런 기능들은 C++ 프로그래밍에서 사용된다기보다 C++ 기반 위에 만들어진 하이레벨의 블루프린트 시스템이 제공하는 게임 API에서 유용하게 사용됩니다. 따라서 한정 접근자 규칙은 C++ 코드 베이스에서 지켜주면 좋을 것 같습니다.
C++에서 활용하지 않지만 강의에서 굳이 언급한 이유는 이런 기능이 있다는 것을 알아두면 좋기 때문입니다. C++ 기준으로 보면 말도 안되는 블루프린트 API들이 어떻게 만들어지는지 파악할 수 있습니다. ( 예를 들면 String으로 함수 이름을 지정해 호출하기 등등.. )
Find라는 함수의 소스코드를 보면 말씀하신대로 디폴트 구현은 O(n)으로 루프를 돕니다. 다만 하나의 객체에 그렇게 많은 속성이 있지 않기 때문에, 굳이 트리나 해시테이블로 재구성하지 않고 있는 것으로 보여지는데, 너무 속성이 많아 필요하다고 판단되면, 직접 TMap등을 사용해 캐시맵을 만들어 사용하면 될 것 같습니다.
언리얼은 필요하면 모두 만들어쓸 수 있는 자유로운 엔진입니다. ㅋ