C++ RTTI 완벽 이해: dynamic_cast부터 커스텀 RTTI까지 (시리즈 정리)
C++ RTTI 기본기에서 시작해 custom RTTI와 Unreal reflection까지 연결해서 이해할 수 있게 정리한 시리즈 허브입니다.
시리즈 열기Game Engine Framework Notes
C++와 실제 엔진 사례를 바탕으로 메모리, 자료구조, Unreal/Unity 내부 구조를 설명하는 기술 블로그입니다.
최근에 직접 정리한 허브 글을 기준으로, 먼저 읽으면 좋은 시리즈를 모았습니다.
C++ RTTI 기본기에서 시작해 custom RTTI와 Unreal reflection까지 연결해서 이해할 수 있게 정리한 시리즈 허브입니다.
시리즈 열기C++ 함수 포인터, callback, std::function, delegate, 멀티캐스트 delegate까지 게임 엔진 이벤트 시스템 관점에서 단계적으로 연결해 정리한 시리즈 허브입니다.
시리즈 열기Fixed timestep, variable timestep, hybrid loop, deltaTime과 FPS 제어까지 게임 루프 핵심을 엔진 관점에서 정리한 시리즈 허브입니다.
시리즈 열기C++ 메모리 구조, allocator, memory pool, placement new를 시리즈 흐름으로 읽을 수 있게 정리한 허브 글입니다.
시리즈 열기스택/힙, cache miss, AoS/SoA, ECS까지 게임 개발자 관점의 메모리 구조 글을 한데 모은 시리즈입니다.
시리즈 열기C++ RTTI 기본기에서 시작해 custom RTTI와 Unreal reflection까지 연결해서 이해할 수 있게 정리한 시리즈 허브입니다.
예제 코드 깃허브 링크 🚀 들어가며 이전 글에서 C++의 dynamic_cast와 RTTI 개념을 살펴봤습니다. 그리고 중요한 사실을 확인했습니다. ❗ dynamic_cast는 안전하지만, 런타임 비용이 발생한다 또한 다운캐스팅이 왜 위험한지도 메모리…
[1.5편] C++ 다운캐스팅이 위험한 이유: 메모리 구조와 포인터 관점에서 이해하기 🚀 들어가며 이전 글에서 dynamic_cast와 RTTI에 대해 살펴봤습니다. 그런데 여기서 한 가지 중요한 질문이 남습니다. ❓ 왜 C++에서…
dynamic_cast를 왜 써야 하는지, RTTI 개념부터 typeid 활용까지 한 번에 정리했습니다. 👉 잘못된 캐스팅으로 인한 버그, RTTI로 안전하게 해결할 수 있습니다. C++로 게임이나 엔진을 개발하다 보면 이런…
🚀 들어가며 이전 글에서는 C++에서 다운캐스팅이 왜 위험한지, 그리고 dynamic_cast 없이 타입을 확인하기 위한 TypeId/TypeInfo 기반 커스텀 RTTI 시스템을 직접 구현해봤습니다. 그 과정을 보면 자연스럽게 이런 질문이 생깁니다.…
C++ 함수 포인터, callback, std::function, delegate, 멀티캐스트 delegate까지 게임 엔진 이벤트 시스템 관점에서 단계적으로 연결해 정리한 시리즈 허브입니다.
델리게이트 시리즈 1편: 함수 포인터 2편: std::function 3편: Delegate 구현 4편: 엔진 스타일 Delegate 들어가며 언리얼 엔진의 델리게이트, 유니티의 이벤트 시스템의 기반이 되는 개념인 함수 포인터에 대해…
델리게이트 시리즈 1편: 함수 포인터 2편: std::function 3편: Delegate 구현 4편: 엔진 스타일 Delegate 들어가며 이전 글에서는 함수 포인터를 이용해 함수를 나중에 실행하는 콜백 구조에 대해 살펴봤습니다.…
델리게이트 시리즈 1편: 함수 포인터 2편: std::function 3편: Delegate 구현 4편: 엔진 스타일 Delegate 들어가며 이전 글에서는 std::function과 lambda를 활용해서 유연한 콜백 구조를 만드는 방법을 살펴봤습니다. std::function<void()>…
델리게이트 시리즈 1편: 함수 포인터 2편: std::function 3편: Delegate 구현 4편: 엔진 스타일 Delegate 들어가며 이전 글에서는 std::function을 기반으로 멀티캐스트 델리게이트 구조를 직접 구현해봤습니다. class Delegate {…
Fixed timestep, variable timestep, hybrid loop, deltaTime과 FPS 제어까지 게임 루프 핵심을 엔진 관점에서 정리한 시리즈 허브입니다.
🚀 들어가며 이전 글에서는 C++로 게임 루프를 직접 구현하면서👉 고정 프레임(Fixed Timestep) 구조를 살펴봤습니다. 이번 글에서는 한 단계 더 나아가👉 게임 루프의 다양한 방식들을 비교해보겠습니다. 🎯 이번 글의…
🚀 들어가며 게임을 만들다가 이런 경험을 해보셨을 겁니다. 컴퓨터가 빠르면 게임이 빨라지고 컴퓨터가 느리면 게임이 느려진다 같은 코드인데 실행 환경에 따라 게임 속도가 달라집니다. 이 문제를 해결하는 핵심…
C++ 메모리 구조, allocator, memory pool, placement new를 시리즈 흐름으로 읽을 수 있게 정리한 허브 글입니다.
들어가며 C++ STL 컨테이너를 보다 보면 이런 코드를 자주 보게 됩니다. std::vector<int, std::allocator> numbers; 그런데 대부분의 경우, allocator는 직접 건드리지 않습니다. 왜냐하면, 기본 allocator만 사용해도 대부분 잘 동작하기…
들어가며 이전 글에서는 C++ allocator의 기본 개념을 정리했습니다. allocator는 쉽게 말하면 메모리 할당 정책을 컨테이너와 분리하기 위한 구조입니다. 그런데 allocator는 설명만 들으면 조금 추상적으로 느껴질 수 있습니다. 이번…
들어가며 이전 글에서는 allocator를 사용해 직접 구현한 Vector를 개선해봤습니다. 그 과정에서 allocator는 단순 메모리 할당기가 아니라, 메모리 확보와 객체 생명주기를 분리하기 위한 구조라는 이야기를 했습니다. 그리고 allocator를 사용하다…
게임 개발을 하거나 게임 개발 공부를 하다보면, 힙에서 사용할 객체를 생성할 때 자연스럽게 new를 사용하게 됩니다. 사전에 객체 생성 시점을 정확하게 예측하기 어렵고, 언제 해제될지도 명확하지 않은 상황이라면…
최근에 올린 글을 시간순으로 확인할 수 있습니다.
Unity 개발자가 C++ 게임 엔진 구조를 공부하면서 게임 루프, 객체 관리, 메모리 구조를 더 깊게 이해하는 과정을 표현한 이미지Unity를 활용해 게임을 개발하면 초반에는 대부분의 기능을 빠르게 구현할 수…
게임 엔진을 공부하다 보면 생각보다 많은 문제들이 결국 메모리 구조로 연결된다는 것을 알게됩니다. 왜 최근 엔진들이 ECS 구조에 관심을 가지는지, 왜 allocator를 직접 구현하는지, 왜 Cache Locality가 중요한지,…
들어가며 C++에서 메모리 관리는 단순히 new와 delete를 사용하는 수준에서 끝나지 않습니다. 특히 게임 엔진이나 고성능 시스템을 직접 구현하다 보면 메모리를 언제 확보하고, 객체를 언제 생성하며, 이미 확보한 메모리를…
dynamic_cast를 왜 써야 하는지, RTTI 개념부터 typeid 활용까지 한 번에 정리했습니다. 👉 잘못된 캐스팅으로 인한 버그, RTTI로 안전하게 해결할 수 있습니다. C++로 게임이나 엔진을 개발하다 보면 이런…
예제 코드 깃허브 링크 🚀 들어가며 👉 이 시리즈는 RTTI 개념에서 시작해 엔진 구조까지 단계적으로 확장됩니다. C++에서 타입을 다루는 방법은 단순한 문법 이상의 의미를 가집니다. dynamic_cast로 시작해서👉…
AI 시대에는 단순히 코드를 사용하는 능력보다, 코드와 시스템의 동작 원리를 이해하고 활용하는 능력이 더 중요해지고 있습니다. 유니티나 언리얼 같은 상용 게임 엔진을 사용하는 게임 개발자 역시, 엔진의…
안녕하세요, 장세윤입니다. 유니티 RPG 게임 개발을 주제로 한 책을 출간했습니다. 책 이름은 [유니티 엔진 개발자가 알려주는] 유니티를 활용한 RPG 게임 개발입니다. 이 책은 그동안 진행해 온 RPG 제작…
이전 글에서는 왜 최근 게임 엔진들이 Component 기반 구조를 사용하기 시작했는지 정리했습니다. 게임은 생각보다 기능 조합이 굉장히 많은 프로그램입니다. 그리고 기능이 계속 추가되기 시작하면, 전통적인 객체 지향 상속…
게임을 개발하다가 Player, Monster, NPC 클래스를 설계해야 하는 상황이 발생했다고 가정해봅시다. 아래와 같은 형태로 클래스를 설계할 수 있습니다. class Player { }; class Monster { }; class NPC…
우리는 AI가 코드를 점점 더 잘 작성하는 시대를 살아가고 있습니다. 자연스럽게 AI 시대에 개발자가 살아남는 방법에 대해 요즘 많이 고민하게 됩니다. AI 시대 개발자는 무엇을 공부해야 할까요? 어떤…
이번에는 배열에 대한 이야기를 해보려고 합니다. 자료구조를 공부하다 보면 배열은 가장 먼저 배우는 자료구조입니다. 그래서인지 배열을 너무 단순하게 생각하는 경우가 많습니다. 같은 타입의 데이터를 여러 개 저장하는 공간이고,…
자료구조를 공부할 때는 보통 시간 복잡도(Big-O)를 중심으로 배우게 됩니다. 그래서 linked list는 삽입/삭제가 빠르고, vector는 중간 삽입이 느리다고 배웁니다. 그리고 게임 엔진은 linked list 같은 구조를 굉장히 많이…
최근에 ECS라는 키워드를 굉장히 자주 듣습니다. Unity DOTS, Unreal Mass, Data Oriented Design 같은 키워드들을 살펴 보면 거의 반드시 등장합니다. 대표적인 상용 엔진들은 컴포넌트 기반(Component Based)으로 게임 객체를…