컴포넌트 기반 구조는 왜 유지보수에 유리할까?
이전 글에서는 게임 개발에서 객체 지향 상속 구조가 점점 복잡해질 수 있는 이유를 정리했습니다. 살펴본 것과 같이 게임은 생각보다 기능 조합이 굉장히 많은 프로그램입니다. 프로젝트 규모가 커질수록 복잡도 역시 빠르게 증가하기 시작합니다. 새로운 기능이…
Series Archive
게임 개발 및 프로그래밍에 관련된 주제에 대한 카테고리 입니다.
이전 글에서는 게임 개발에서 객체 지향 상속 구조가 점점 복잡해질 수 있는 이유를 정리했습니다. 살펴본 것과 같이 게임은 생각보다 기능 조합이 굉장히 많은 프로그램입니다. 프로젝트 규모가 커질수록 복잡도 역시 빠르게 증가하기 시작합니다. 새로운 기능이…
이전 글에서는 왜 최근 게임 엔진들이 Component 기반 구조를 사용하기 시작했는지 정리했습니다. 게임은 생각보다 기능 조합이 굉장히 많은 프로그램입니다. 그리고 기능이 계속 추가되기 시작하면, 전통적인 객체 지향 상속 구조 만으로는 관리하기 어려워지는 상황들이 등장하기…
게임을 개발하다가 Player, Monster, NPC 클래스를 설계해야 하는 상황이 발생했다고 가정해봅시다. 아래와 같은 형태로 클래스를 설계할 수 있습니다. class Player { }; class Monster { }; class NPC { }; 그리고 프로젝트가 점점 커지기…
우리는 AI가 코드를 점점 더 잘 작성하는 시대를 살아가고 있습니다. 자연스럽게 AI 시대에 개발자가 살아남는 방법에 대해 요즘 많이 고민하게 됩니다. AI 시대 개발자는 무엇을 공부해야 할까요? 어떤 방향을 기준으로 삼아야 할까요? 그동안 여러…
이번에는 배열에 대한 이야기를 해보려고 합니다. 자료구조를 공부하다 보면 배열은 가장 먼저 배우는 자료구조입니다. 그래서인지 배열을 너무 단순하게 생각하는 경우가 많습니다. 같은 타입의 데이터를 여러 개 저장하는 공간이고, 인덱스로 접근할 수 있는 가장 기본적인…
Unity 개발자가 C++ 게임 엔진 구조를 공부하면서 게임 루프, 객체 관리, 메모리 구조를 더 깊게 이해하는 과정을 표현한 이미지Unity를 활용해 게임을 개발하면 초반에는 대부분의 기능을 빠르게 구현할 수 있습니다. 캐릭터 이동, 충돌 처리, UI,…
자료구조를 공부할 때는 보통 시간 복잡도(Big-O)를 중심으로 배우게 됩니다. 그래서 linked list는 삽입/삭제가 빠르고, vector는 중간 삽입이 느리다고 배웁니다. 그리고 게임 엔진은 linked list 같은 구조를 굉장히 많이 사용할 것 같다는 생각을 했던 것…
게임 엔진을 공부하다 보면 생각보다 많은 문제들이 결국 메모리 구조로 연결된다는 것을 알게됩니다. 왜 최근 엔진들이 ECS 구조에 관심을 가지는지, 왜 allocator를 직접 구현하는지, 왜 Cache Locality가 중요한지, 왜 Object Pool이나 SoA(Struct of Array)…
최근에 ECS라는 키워드를 굉장히 자주 듣습니다. Unity DOTS, Unreal Mass, Data Oriented Design 같은 키워드들을 살펴 보면 거의 반드시 등장합니다. 대표적인 상용 엔진들은 컴포넌트 기반(Component Based)으로 게임 객체를 설계했습니다. 유니티의 경우 GameObject가 MonoBehaviour를 상속하는…
지금까지 메모리 구조와 관련해서 Stack과 Heap, Cache Miss, allocator, placement new, Object Pool에 대해 살펴봤습니다. 이 내용들을 하나씩 따로 보면 서로 다른 주제처럼 느껴질 수도 있습니다. 스택과 힙은 메모리 영역에 대한 이야기이고, Cache Miss는…