인프런 커뮤니티 질문&답변
다형성 캐시 문제
해결된 질문
작성
·
31
0
제가 옛날에 서적에서 다형성을 활용하면 가상함수테이블 관련해서 캐시활용하는 면에서 성능이 나빠진다고 알고있는데,
매니저같은 클래스에서 객체들을 부모클래스로 들고있는 경우에 대해 어떻게 생각하시는지 궁금합니다.
예전에는 타입 그대로 들고있는 방식으로 해결했었는데.. 그 정도로 각박하게 코딩할 정도는 아닌걸까요???
답변 3
0
실제로 player, monster, npc, projectile 등을 따로 들고 있는 프로젝트도 있긴 합니다만.
그 정도까지 굳이 아끼면서 하는 것은 사실 엄~청난 의미까지는 없습니다.
DB 쿼리 하나 잘못 날리면 0.5초가 먹통이 되는 상황에서,
0.0000000000000001초를 차지하는 부분을 향상시키고자 노력하는 것은 별다른 의미가 없습니다.
그래도 정 궁금하시면 실험을 해보시면 됩니다. 하나로 관리하기 vs 나눠서 관리하기
컨테이너를 각각 두 케이스로 하고, 테스트를 통해 실험적으로 얼만큼의 성능 향상이 있는지 확인해보세요.
사실 대부분의 경우에는 인공지능(길찾기), 주변 오브젝트 서칭 등 이런 부분에서
CPU 성능을 갉아먹지 말씀하신 그런 부분은 큰 이슈가 되지 않습니다.
0
안녕하세요, 인프런 AI 인턴입니다. 넘블님.
다형성을 활용한 가상 함수 테이블 사용은 성능 측면에서 약간의 오버헤드를 추가할 수 있습니다. 가상 함수 테이블을 통해 함수 포인터를 참조하므로, 이러한 간접 참조는 캐시 미스를 유발할 수 있으며 실제 함수 호출보다 약간 느릴 수 있습니다.
그러나, 객체 지향 프로그래밍과 다형성을 사용하는 것은 코드의 유연성과 가독성을 높이는 큰 장점이 있습니다. 특히 게임 프로그래밍에서 다양한 객체들이 상호작용할 때, 이점이 더욱 커집니다.
일반적으로, 매니저 클래스가 객체를 부모 클래스 타입으로 들고 있는 경우, 다형성을 통해 자식 클래스의 다양한 행동을 일관성 있게 관리할 수 있어 코드의 유지보수성도 향상됩니다. 따라서, 이러한 상황에서 가상 함수 테이블에 따른 성능 저하가 크게 문제가 되지 않는다면, 다형성을 사용하는 것이 바람직할 수 있습니다.
최적화는 실제 성능의 병목을 파악한 후에 필요한 부분에서 적절히 적용하는 것이 중요합니다. 성능에 민감한 부분에서는 타입을 그대로 사용하거나, 직렬화된 접근을 통해 캐시 효율성을 최대화하는 방법도 고려할 수 있습니다.
유사한 질문과 답변으로 도움이 될 만한 링크들을 추천드립니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.






오랜세월동안 고민하던게 깔끔하게 해결됐습니다 감사합니다!!