Company
교육 철학

Data Management

Data Management

관련 소스 파일
Scripts/Runtime/Config/ConfigComponent.cs
Scripts/Runtime/Config/ConfigHelperBase.cs
Scripts/Runtime/Config/DefaultConfigHelper.cs
Scripts/Runtime/DataTable/DataRowBase.cs
Scripts/Runtime/DataTable/DataTableComponent.cs
Scripts/Runtime/DataTable/DataTableHelperBase.cs
Scripts/Runtime/DataTable/DefaultDataTableHelper.cs
Scripts/Runtime/Localization/DefaultLocalizationHelper.cs
Scripts/Runtime/Localization/LocalizationComponent.cs
Scripts/Runtime/Localization/LocalizationHelperBase.cs
Scripts/Runtime/Setting/DefaultSetting.cs
Scripts/Runtime/Setting/DefaultSettingHelper.cs
Scripts/Runtime/Setting/PlayerPrefsSettingHelper.cs
Scripts/Runtime/Setting/PlayerPrefsSettingHelper.cs.meta
Scripts/Runtime/Setting/SettingComponent.cs
Scripts/Runtime/Setting/SettingHelperBase.cs
데이터 관리 시스템은 Unity Game Framework에서 구조화된 데이터 테이블, 전역 설정, 로컬라이제이션 자산, 그리고 지속적인 플레이어 설정을 포함한 다양한 유형의 게임 데이터를 처리할 수 있는 메커니즘을 제공합니다. 이 서브시스템들은 개발자가 게임의 라이프사이클 전반에 걸쳐 다양한 데이터를 효율적으로 관리하고 접근할 수 있도록 합니다.

Overview

데이터 관리 프레임워크는 네 가지 주요 서브시스템으로 구성됩니다:
Data Tables: 행과 열로 구성된 구조화된 게임 데이터 (→ Data Tables 참조)
Configuration: 런타임에 로드되는 전역 게임 설정 (→ Configuration System 참조)
Localization: 다국어 텍스트와 리소스 (→ Localization System 참조)
Settings: 게임 세션 간에 저장되는 지속적인 플레이어 설정
각 서브시스템은 유사한 아키텍처 패턴을 따르며, 헬퍼 패턴을 통한 커스터마이징을 지원합니다.
출처:
Scripts/Runtime/DataTable/DataTableComponent.cs
Scripts/Runtime/Config/ConfigComponent.cs
Scripts/Runtime/Localization/LocalizationComponent.cs
Scripts/Runtime/Setting/SettingComponent.cs

Common Architecture Pattern

네 가지 데이터 관리 서브시스템 모두 일관성과 유연성을 제공하기 위해 동일한 아키텍처 패턴을 따릅니다.
각 서브시스템은 다음으로 구성됩니다:
Component: 퍼블릭 API를 제공하는 Unity MonoBehaviour
Manager: Game Framework가 처리하는 핵심 구현
Helper Base: 데이터 로드 및 파싱 방식을 정의하는 추상 클래스
Default Helper: 헬퍼 인터페이스의 표준 구현
출처:
Scripts/Runtime/DataTable/DataTableHelperBase.cs
Scripts/Runtime/Config/ConfigHelperBase.cs
Scripts/Runtime/Localization/LocalizationHelperBase.cs
Scripts/Runtime/Setting/SettingHelperBase.cs

Data Table System

데이터 테이블 시스템은 행과 열로 구성된 구조화된 게임 데이터를 관리합니다. 타입 안정성이 보장된 방식으로 데이터를 로드, 파싱, 접근할 수 있는 기능을 제공합니다.
주요 작업:
Create Data Tables: CreateDataTable<T>() (T는 IDataRow를 구현하는 클래스)
Load Data: 리소스에서 데이터 테이블 파일 로드
Access Data: GetDataRow(id) 또는 쿼리 메서드를 통해 데이터 행 접근
Destroy Tables: 더 이상 필요하지 않을 때 리소스 해제
예시:
// 커스텀 데이터 타입용 데이터 테이블 생성 IDataTable<ItemData> itemTable = GameEntry.GetComponent<DataTableComponent>().CreateDataTable<ItemData>(); // 리소스에서 데이터 로드 GameEntry.GetComponent<DataTableComponent>().LoadDataTable("Items"); // ID로 데이터 접근 ItemData item = itemTable.GetDataRow(10001);
C#
복사
출처:
Scripts/Runtime/DataTable/DataTableComponent.cs 144-264
Scripts/Runtime/DataTable/DefaultDataTableHelper.cs 22-169
Scripts/Runtime/DataTable/DataRowBase.cs 15-51

Configuration System

설정 시스템은 전역 게임 설정을 저장하고 검색할 수 있는 방법을 제공합니다. 이러한 설정은 일반적으로 런타임에 구성 파일에서 로드되며 게임 세션 동안 일정하게 유지됩니다.

주요 특징

간단한 Key-Value 형식: 탭으로 구분된 키-값 포맷
여러 데이터 타입 지원: bool, int, float, string 값 지원
기본값 제공: 설정 키가 없을 경우 기본값 제공 가능
런타임 접근: 게임 어디서든 손쉽게 접근 가능
예시:
// 구성 파일 로드 GameEntry.GetComponent<ConfigComponent>().ReadData("DefaultConfig"); // 설정 값 가져오기 bool enableTutorial = GameEntry.GetComponent<ConfigComponent>().GetBool("EnableTutorial", true); float musicVolume = GameEntry.GetComponent<ConfigComponent>().GetFloat("MusicVolume", 0.8f); string serverAddress = GameEntry.GetComponent<ConfigComponent>().GetString("ServerAddress", "localhost");
C#
복사
샘플 구성 파일 형식:
# Comment line 1 EnableTutorial bool true 2 MusicVolume float 0.8 3 ServerAddress string localhost
Plain Text
복사
출처:
Scripts/Runtime/Config/ConfigComponent.cs 20-407
Scripts/Runtime/Config/DefaultConfigHelper.cs 20-180
Scripts/Runtime/Config/ConfigHelperBase.cs 17-68

Localization System

로컬라이제이션 시스템은 다국어 텍스트와 리소스를 관리합니다. 선택된 언어에 따라 다른 문자열 사전을 로드하여 여러 언어 지원을 가능하게 합니다.

주요 특징

다국어 지원
시스템 언어 자동 감지
매개변수를 포함한 문자열 포맷 지원
Key-Value 쌍의 딕셔너리 파일 구조
런타임 언어 전환 가능
예시:
// 현재 언어 설정 GameEntry.GetComponent<LocalizationComponent>().Language = Language.English; // 현재 언어에 맞는 딕셔너리 로드 GameEntry.GetComponent<LocalizationComponent>().ReadData("UI"); // 지역화된 문자열 가져오기 string welcomeMessage = GameEntry.GetComponent<LocalizationComponent>().GetString("Welcome"); string greetingMessage = GameEntry.GetComponent<LocalizationComponent>().GetString("Greeting", playerName);
C#
복사
샘플 딕셔너리 파일 형식:
# Comment line 1 Welcome string Welcome to our game! 2 Greeting string Hello, {0}! 3 Score string Your score: {0}
Plain Text
복사
출처:
Scripts/Runtime/Localization/LocalizationComponent.cs 20-1113
Scripts/Runtime/Localization/DefaultLocalizationHelper.cs 20-238
Scripts/Runtime/Localization/LocalizationHelperBase.cs 17-76

Setting System

설정 시스템은 게임 세션 간에 저장되어야 하는 지속적인 플레이어 설정을 관리합니다. 설정 시스템은 읽기뿐 아니라 쓰기도 지원한다는 점에서 구성 시스템과 다릅니다.

주요 특징

다양한 데이터 타입 지원: bool, int, float, string, 직렬화된 객체
자동 저장 및 로딩
기본값 제공
여러 저장 옵션: 기본 파일 기반 저장 또는 PlayerPrefs 기반 저장
객체 직렬화: JSON 직렬화를 통한 복잡한 객체 저장 지원
예시:
// 설정 값 읽기 bool musicEnabled = GameEntry.GetComponent<SettingComponent>().GetBool("MusicEnabled", true); float volume = GameEntry.GetComponent<SettingComponent>().GetFloat("MusicVolume", 0.8f); // 설정 값 변경 GameEntry.GetComponent<SettingComponent>().SetBool("MusicEnabled", false); GameEntry.GetComponent<SettingComponent>().SetFloat("MusicVolume", 0.5f); // 복잡한 객체 저장 PlayerProfile profile = new PlayerProfile(); GameEntry.GetComponent<SettingComponent>().SetObject("PlayerProfile", profile); // 변경 사항 저장 GameEntry.GetComponent<SettingComponent>().Save();
C#
복사
기본 설정 시스템은 Application.persistentDataPath/GameFrameworkSetting.dat 경로에 있는 바이너리 파일에 데이터를 저장합니다.
PlayerPrefs 헬퍼는 Unity의 PlayerPrefs 시스템을 사용합니다.
출처:
Scripts/Runtime/Setting/SettingComponent.cs 21-322
Scripts/Runtime/Setting/DefaultSettingHelper.cs 19-386
Scripts/Runtime/Setting/DefaultSetting.cs 19-313
Scripts/Runtime/Setting/PlayerPrefsSettingHelper.cs 18-312
Scripts/Runtime/Setting/SettingHelperBase.cs 18-208

Data Management Initialization Process

아래 시퀀스 다이어그램은 데이터 관리 컴포넌트의 초기화 과정을 보여줍니다. 이 초기화 플로우는 네 가지 데이터 관리 컴포넌트 (DataTableComponent, ConfigComponent, LocalizationComponent, SettingComponent)에 모두 적용됩니다.
출처:
Scripts/Runtime/DataTable/DataTableComponent.cs 69-124
Scripts/Runtime/Config/ConfigComponent.cs 67-135
Scripts/Runtime/Localization/LocalizationComponent.cs 93-162
Scripts/Runtime/Setting/SettingComponent.cs 45-77

Helper Pattern Implementation

다음 표는 다양한 헬퍼 인터페이스에 걸친 공통 메서드를 비교한 것입니다:
Method
DataTableHelper
ConfigHelper
LocalizationHelper
SettingHelper
ReadData from asset
-
ReadData from bytes
-
ParseData from string
-
ParseData from bytes
-
ReleaseDataAsset
-
Load
-
-
-
Save
-
-
-
Get/Set values
-
-
-
헬퍼 패턴은 프레임워크 코드를 수정하지 않고 데이터의 로드, 파싱, 저장 방식을 커스터마이징할 수 있는 일관된 방법을 제공합니다.
출처:
Scripts/Runtime/DataTable/DataTableHelperBase.cs 17-68
Scripts/Runtime/Config/ConfigHelperBase.cs 17-68
Scripts/Runtime/Localization/LocalizationHelperBase.cs 17-76
Scripts/Runtime/Setting/SettingHelperBase.cs 18-208

Customizing Data Management

각 데이터 관리 서브시스템은 헬퍼 클래스를 구현함으로써 커스터마이징할 수 있습니다.
1.
적절한 헬퍼 베이스 클래스를 상속하는 클래스 생성:
DataTableHelperBase
ConfigHelperBase
LocalizationHelperBase
SettingHelperBase
2.
데이터의 로드, 파싱, 저장 방식을 변경하기 위해 필요한 메서드를 구현
3.
Unity 인스펙터 또는 코드에서 컴포넌트에 커스텀 헬퍼 할당
→ 이를 통해 커스텀 데이터 포맷 지원, 다양한 저장 솔루션, 외부 서비스와의 통합 등을 프레임워크 코드를 수정하지 않고도 구현할 수 있습니다.

Best Practices

데이터 테이블 구성: 데이터 테이블에 올바른 스키마를 만들고 일관성을 유지하세요.
타입 안전 접근 사용: 가능한 경우 항상 타입 안전한 데이터 접근 메서드를 사용하세요.
로딩 실패 처리: 데이터 로딩 성공 여부를 항상 확인하고, 대체 메커니즘을 제공하세요.
로컬라이제이션 워크플로우: 언어 동기화를 유지하기 위해 로컬라이제이션 키 추가/업데이트에 대한 워크플로우를 구축하세요.
데이터 검증: 데이터 테이블과 설정 파일에 대한 검증을 구현하여 오류를 조기에 발견하세요.
설정 백업: 플레이어 설정 데이터 손실을 방지하기 위해 백업 메커니즘을 고려하세요.
런타임 로딩 최소화: 메모리 사용과 로딩 시간을 줄이기 위해 런타임에는 필요한 데이터만 로드하세요.