Company
교육 철학

Data Nodes (데이터 노드 시스템)

Data Nodes (데이터 노드 시스템)

관련 소스 파일

GameFramework/Base/Variable/GenericVariable.cs
GameFramework/Base/Variable/Variable.cs
GameFramework/DataNode/DataNodeManager.DataNode.cs
GameFramework/DataNode/DataNodeManager.cs
GameFramework/DataNode/IDataNode.cs
GameFramework/DataNode/IDataNodeManager.cs
GameFramework/Fsm/FsmBase.cs
GameFramework/Fsm/IFsm.cs
GameFramework/Fsm/IFsmManager.cs

소개

Data Nodes 시스템은 Game Framework 내에서 트리 형태의 계층적 구조로 게임 데이터를 저장하고 조회할 수 있게 해주는 관리 시스템입니다.
다양한 타입의 데이터를 구조적으로 저장할 수 있으며, 게임 상태 관리, 런타임 설정, 계층적 데이터 관리에 이상적입니다.
주요 활용 예시:
계층적인 게임 설정 관리
런타임 게임 상태 추적
서로 다른 서브시스템 간 데이터 공유
관련된 데이터를 논리적으로 조직화

시스템 개요

Data Node 시스템은 트리 구조를 구현합니다.
각 노드는 값(데이터)을 저장할 수 있으며 여러 자식 노드를 가질 수 있습니다.
노드는 파일 시스템처럼 경로(path) 로 식별됩니다.
경로 기반 탐색으로 직관적인 데이터 접근이 가능합니다.

핵심 구성 요소

DataNodeManager

데이터 노드 작업의 주요 진입점
GameFrameworkModule을 상속하고 IDataNodeManager를 구현
단일 루트 노드를 유지하며, 탐색/생성/수정 기능을 제공

DataNode

IDataNode 인터페이스의 구현체
계층 내 단일 노드를 표현
구성 요소:
이름(name)
부모 노드(루트 제외)
선택적 자식 노드
선택적 데이터(Variable 타입)

Variable

Variable 클래스와 제네릭 확장 클래스 Variable<T> 는 노드 안의 데이터 저장에 사용
다양한 데이터 타입을 안전하게 저장 가능

노드 계층 및 경로 탐색

노드 구조

트리는 <Root>라는 루트 노드에서 시작
각 노드는 형제 노드들 간에 고유한 이름을 가짐
변수 데이터(선택 사항), 여러 자식 노드를 가질 수 있음

경로 탐색

경로 문자열을 사용해 탐색
구분자: ., /, \
예: "Player/Stats/Health" → Player 노드 → Stats 노드 → Health 노드

Data Node 다루기

노드 접근 및 생성

GetNode(path): 경로에 해당하는 기존 노드 반환
GetOrAddNode(path): 존재 시 반환, 없으면 새로 생성

데이터 관리

SetData<T>(path, data): 해당 경로의 노드에 데이터 저장
GetData<T>(path): 해당 노드의 타입 안전 데이터 반환

노드 제거

RemoveNode(path): 해당 노드 및 자식 전체 제거
Clear(): 루트를 제외한 모든 노드 제거

예시 사용 패턴

게임 상태 저장/조회

// 플레이어 체력 저장 dataNodeManager.SetData<VarInt>("Player/Stats/Health", new VarInt(100)); // 플레이어 체력 조회 VarInt health = dataNodeManager.GetData<VarInt>("Player/Stats/Health"); int healthValue = health.Value; // 100
C#
복사

설정 데이터 구성

// 그래픽 설정 dataNodeManager.SetData<VarString>("Settings/Graphics/Resolution", new VarString("1920x1080")); dataNodeManager.SetData<VarBoolean>("Settings/Graphics/Fullscreen", new VarBoolean(true)); // 오디오 설정 dataNodeManager.SetData<VarFloat>("Settings/Audio/MasterVolume", new VarFloat(0.8f)); dataNodeManager.SetData<VarFloat>("Settings/Audio/MusicVolume", new VarFloat(0.5f));
C#
복사

다른 프레임워크 시스템과의 통합

FSM(Finite State Machine) 통합

FSM은 상태 데이터를 저장할 때 Variable 시스템을 사용
Data Node와 동일한 방식으로 데이터 관리 가능

Reference Pool 통합

Data Node는 Reference Pool 시스템을 활용해 메모리 관리 최적화
노드와 변수는 풀링되어 재사용되므로 GC 부담을 최소화

성능 고려사항

경로 해석

문자열 분리 작업이 자주 발생하므로 비용이 클 수 있음
자주 접근하는 노드는 경로 탐색 대신 캐싱 권장

메모리 관리

Reference Pool 사용으로 GC 최소화
직접 인스턴스화하지 말고, 프레임워크 메서드를 통해 노드 생성/삭제

노드 구조

트리는 가능하면 너무 깊지 않게 유지
관련 데이터를 그룹화하여 논리적 구조 유지

요약

Data Nodes 시스템은 계층적 데이터 관리에 유연한 방법을 제공합니다.
트리 구조와 경로 기반 접근 방식을 통해, 게임 전반에서 상태·설정·서브시스템 간 공유 데이터를 깔끔하고 조직적으로 관리할 수 있습니다.