
일반적인 객체지향 기반 게임 개발에서는 기능과 데이터를 함께 가지는 클래스 구조를 만든다.
예를 들어, 객체지향에 친숙한 개발자가 플레이어 캐릭터의 직업(Class) 시스템을 만든다면 다음과 같은 상속 구조가 자연스럽게 등장한다.
APlayerCharacterBase
├─ AWarrior
├─ AMage
├─ AArcher
└─ APaladin
혹은 직업의 특성에 따라 별도의 클래스를 계속 파생시키기도 한다.
AMage
├─ AFireMage
└─ AIceMage
이렇게 프로그래머들이 객체지향 방식으로 게임 개발을 시작하는 이유는 직관성과 익숙함 때문이다.
객체지향 프로그래밍은


또한 클래스 상속 기반의 구조는 기본적으로 흔하고 널리 사용하기 때문에 접근성이 높다는 이유도 있다.
이 방식은 초기 구현이 직관적이지만, 아이템의 값이나 속성을 클래스 내부에 직접 작성하게 되는 경우가 많다.
물론 작은 규모의 프로젝트에서는 충분히 효과적이고 빠르게 개발 가능한 방식이다.
하지만 이러한 방식은 프로젝트가 커질수록 확장성이 떨어질 수 있다.
만약 새로운 캐릭터를 추가해야하는 상황이 발생한다면
→ 결국 캐릭터 수가 많아질수록 클래스 구조는 복잡해지고 구조 변경에 대한 부담이 증가할 수 있다.

또한 상속 기반 설계는 계층이 깊어질수록 새로운 기능을 추가하기 위해 기존 캐릭터 클래스를 수정해야 하는 상황이 발생할 가능성이 있다. 이는 결국 시스템의 유연성을 낮추고 유지보수 비용을 높이는 요인이 될 수 있다.
이러한 문제점은 결국 데이터가 객체에 종속되어 있기 때문에 발생한다.
Data-Driven Design은 데이터와 로직을 분리하는 설계 방식이다.
핵심 아이디어는 다음과 같다.
예를 들어 캐릭터 시스템은 다음과 같이 구성할 수 있다.
ACharacter (동작 담당)
UCharacterDefinition (데이터)
├─ Warrior
├─ Mage
└─ Archer
이 구조에서는 다음과 같은 특징이 생긴다.
즉, 코드 구조를 변경하지 않고도 콘텐츠를 확장할 수 있는 설계가 가능해진다.
Unreal Engine은 이러한 설계를 위해 여러 데이터 중심 시스템을 제공한다.
대표적으로 사용되는 것들은 다음과 같다.

이 시스템들은 공통적으로 게임 로직과 데이터를 분리하여 관리할 수 있도록 설계되어 있다.