C++ Allocator의 기본 원리와 실무에서의 활용

들어가며 C++ STL 컨테이너를 보다 보면 이런 코드를 자주 보게 됩니다. std::vector<int, std::allocator> numbers; 그런데 대부분의 경우, allocator는 직접 건드리지 않습니다. 왜냐하면, 기본 allocator만 사용해도 대부분 잘 동작하기 때문입니다. 그래서 처음 allocator를 접하면 이런 생각이 들기도 합니다. “도대체 allocator는 왜…

현대 그래픽스 API는 왜 이렇게 복잡해졌을까?

들어가며 최근 흥미로운 글 하나를 읽었습니다. 바로 Sebastian Aaltonen의 “No Graphics API“라는 글입니다. 제목만 보면 마치 그래픽스 API 자체가 필요 없다는 주장처럼 보이기도 합니다. 하지만 실제 내용은 조금 다릅니다. 이 글은 아래와 같이 현대의 Graphics API의 발전 과정과 왜 이렇게…

Unity 6 RenderGraph는 무엇이 달라졌을까?

들어가며 최근 Unity 렌더링 구조를 보면 자주 등장하는 키워드 중 하나가 바로 RenderGraph입니다. 특히 Unity 6 이후부터는 URP/HDRP 내부 구조에서도 RenderGraph 기반 흐름이 점점 강조되고 있습니다. 그런데 처음 RenderGraph를 접하면 이런 생각이 들기도 합니다. “기존에도 렌더링은 잘 되고 있었는데, 굳이…

Unity Built-in Render Pipeline의 한계와 SRP의 등장

들어가며 예전 Unity 프로젝트들을 보면 대부분 Built-in Render Pipeline 기반으로 제작되어 있습니다. 한때 Unity 렌더링의 기본 구조였고, 많은 게임들이 이 파이프라인 위에서 만들어졌습니다. 그런데 시간이 지나면서 Unity는 새로운 렌더링 파이프라인을 적극적으로 밀기 시작했습니다. URP(Universal Render Pipeline) HDRP(High Definition Render Pipeline)…

C 언어로 코루틴 구현하기 – switch-case와 __LINE__ 트릭의 원리

🚀 들어가며 아래 링크는 C 언어로 코루틴을 구현하는 아주 유명한 글입니다. 처음 보면 굉장히 충격적입니다. 왜냐하면 C 언어에는 coroutine 문법이 없고, yield도 없고, async/await도 없는데 코루틴처럼 동작하는 구조를 만들어내기 때문입니다. 게다가 스레드도 사용하지 않고, OS context switching도 없고, 복잡한…

GENERATED_BODY는 실제로 어떤 코드를 생성할까?

🚀 들어가며 이전 글에서는 UClass가 실제로 어떤 정보를 가지고 있는지 살펴봤습니다. 정리하면 UClass는 단순한 클래스 이름 저장 구조가 아니라, 언리얼 엔진의 Reflection 시스템을 구성하는 핵심 메타데이터 객체입니다. 그리고 이 Reflection 시스템은 다음 흐름을 통해 만들어집니다. UCLASS / UPROPERTY / UFUNCTION…

UClass는 실제로 어떤 정보를 가지고 있을까?

🚀 들어가며 이전 글에서는 Unreal Header Tool(UHT)이UCLASS, UPROPERTY, UFUNCTION 같은 매크로를 분석해 Reflection 메타데이터를 생성하는 과정을 살펴봤습니다. UHT를 공부하다보면 자연스럽게 다음 질문이 생길 수 있습니다. UHT가 생성한 Reflection 정보는 어디 저장될까? 언리얼은 런타임에 클래스 정보를 어떻게 알고 있을까? 예를 들어,…

언리얼의 TObjectPtr는 왜 등장했을까?

🚀 들어가며 Unreal Engine 4 시절의 C++ 코드를 보면 UObject 참조 변수를 아래와 같이 작성했습니다. UPROPERTY() AActor* TargetActor; 굉장히 익숙한 형태입니다. UObject 계열 객체는 언리얼 GC가 관리하고,UPROPERTY()매크로를 붙이면 GC가 해당 참조를 추적할 수 있습니다. 그런데 Unreal Engine 5로 넘어오면서 새로운…

Unreal Header Tool(UHT)는 실제로 뭘 할까?

🚀 들어가며 이전 글에서는 Unreal Engine이 왜 C++ 기본 RTTI 대신 자체 Reflection 시스템을 사용하는지 살펴봤습니다. 그리고 그 과정에서 자연스럽게 등장했던 것이 바로 UCLASS() UPROPERTY() UFUNCTION() GENERATED_BODY() 같은 매크로들입니다. 언리얼을 공부하다보면 이런 생각이 들 수 있습니다. GENERATED_BODY는 도대체 뭘 하는…

Unreal Engine GC는 어떻게 UObject를 추적할까?

🚀 들어가며 이전 글에서는 Unreal Engine이 왜 C++ 기본 RTTI 대신 자체 Reflection 시스템을 사용하는지 살펴봤습니다. 언리얼은 단순 타입 확인을 넘어서 에디터 블루프린트 직렬화 네트워크 복제 가비지 컬렉션(GC) 같은 엔진 전체 기능과 연결되기 때문에, 자체적인 메타데이터 시스템이 필요했습니다. 언리얼의 메타…