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