데이터 테이블 (Data Tables)
관련 소스 파일
•
Scripts/Editor/ResourceAnalyzer/ResourceAnalyzerController.cs
•
Scripts/Editor/ResourceCollection/Asset.cs
•
Scripts/Editor/ResourceCollection/ResourceCollection.cs
•
Scripts/Editor/ResourceEditor/ResourceEditorController.cs
•
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
개요
데이터 테이블 시스템은 Unity Game Framework의 특화된 구성 요소로, 구조화된 게임 데이터를 효율적으로 관리하기 위해 설계되었습니다.
이 시스템은 다양한 소스로부터 테이블 형태의 데이터(행과 열) 를 로드, 파싱, 접근할 수 있는 강력한 메커니즘을 제공합니다.
게임 설정, 적(Enemy) 능력치, 아이템 데이터베이스 등 게임 고유의 구조적 정보의 기반 역할을 합니다.
•
비테이블 형식 설정 값:
Configuration System 참고
•
다국어 및 지역화 데이터:
Localization System 참고
아키텍처
데이터 테이블 시스템은 컴포넌트 - 매니저 - 헬퍼 패턴을 따릅니다.
이는 관심사의 분리를 명확히 하고, 헬퍼 클래스를 통한 유연한 커스터마이징을 가능하게 합니다.
핵심 구성 요소
1. DataTableComponent
•
데이터 테이블 시스템의 주요 인터페이스
•
역할:
◦
데이터 테이블 매니저 초기화
◦
데이터 테이블 생성, 접근, 파괴
◦
데이터 로딩 및 이벤트 디스패치
◦
데이터 테이블 존재 여부 및 내용 쿼리 제공
DataTableComponent dataTableComponent = GameEntry.GetComponent<DataTableComponent>();
C#
복사
2. DataTableHelperBase
•
추상 클래스 (abstract base class)
•
인터페이스:
◦
IDataProviderHelper<DataTableBase>: 데이터 읽기 및 로딩
◦
IDataTableHelper: 데이터 테이블 관련 작업
•
확장하여 커스텀 헬퍼 구현 가능
3. DefaultDataTableHelper
•
DataTableHelperBase의 기본 구현체
•
기능:
◦
텍스트 또는 바이너리 에셋에서 데이터 테이블 읽기
◦
문자열/바이트 배열 파싱
◦
사용 종료 시 데이터 에셋 해제
•
특징:
◦
텍스트 기반/바이너리 데이터 테이블 모두 지원
◦
.bytes 파일 특별 처리
◦
리소스 시스템과 통합 관리
4. DataRowBase
•
사용자 정의 데이터 행(Row)의 기반 클래스
•
특징:
◦
IDataRow 인터페이스 구현
◦
필수: Id 속성 구현
◦
가상 메서드 제공: 문자열/바이트 기반 데이터 파싱
•
모든 게임 전용 데이터 행 클래스는 반드시 DataRowBase 상속 필요
데이터 흐름
데이터 테이블 로드 및 파싱 시 데이터 흐름은 다음과 같습니다:
1.
DataTableComponent → 로드 요청
2.
DefaultDataTableHelper → 데이터 읽기 및 파싱
3.
DataRowBase 상속 클래스 → 실제 데이터 구조화
4.
DataTableComponent → 접근/조회 가능 상태로 관리
지원 데이터 포맷
1. 텍스트 형식 (Text Format)
•
각 줄이 데이터 행(Row)
•
#으로 시작하는 줄은 주석 처리
•
AddDataRow를 통해 테이블에 추가
•
예시:
10001 Sword 500
10002 Shield 800
Plain Text
복사
2. 바이너리 형식 (Binary Format)
•
텍스트보다 로드 속도 빠름 (하지만 사람이 읽기 힘듦)
•
특징:
◦
BinaryReader로 데이터 탐색
◦
7비트 인코딩 정수로 행 길이 지정
◦
각 행을 바이트 배열로 처리
•
대규모 데이터셋 및 프로덕션 빌드 최적화에 유용
사용 예시
1. 데이터 행 정의
public class ItemData : DataRowBase
{
public int Id { get; private set; }
public string Name { get; private set; }
public int Price { get; private set; }
public override bool ParseDataRow(string dataRowString, object userData)
{
string[] columns = dataRowString.Split('\t');
if (columns.Length < 3) return false;
Id = int.Parse(columns[0]);
Name = columns[1];
Price = int.Parse(columns[2]);
return true;
}
}
C#
복사
2. 데이터 테이블 생성 및 로드
DataTableComponent dataTableComponent = GameEntry.GetComponent<DataTableComponent>();
IDataTable<ItemData> itemDataTable = dataTableComponent.CreateDataTable<ItemData>();
itemDataTable.ReadData("Assets/GameData/Items.txt");
C#
복사
3. 데이터 접근
ItemData item = itemDataTable.GetDataRow(10001);
Debug.Log($"Item: {item.Name}, Price: {item.Price}");
itemDataTable.GetAllDataRows(items => {
foreach (ItemData item in items)
{
// 아이템 데이터 처리
}
});
C#
복사
리소스 시스템과의 통합
•
DefaultDataTableHelper → ResourceComponent를 통해 에셋 로딩
•
데이터 테이블이 필요 없어지면 자동 언로드
관리 기능
테이블 관리
작업 | 설명 | 메서드 |
존재 확인 | 테이블 존재 여부 확인 | HasDataTable<T>() |
생성 | 새 데이터 테이블 생성 | CreateDataTable<T>() |
가져오기 | 기존 데이터 테이블 반환 | GetDataTable<T>() |
전체 조회 | 모든 테이블 반환 | GetAllDataTables() |
파괴 | 데이터 테이블 제거 | DestroyDataTable<T>() |
행 관리
작업 | 설명 | 메서드 |
존재 확인 | 특정 데이터 행 존재 여부 확인 | HasDataRow(id) |
단일 조회 | ID로 데이터 행 조회 | GetDataRow(id) |
복수 조회 | 여러 ID로 데이터 행 조회 | GetDataRows(ids) |
전체 조회 | 모든 데이터 행 가져오기 | GetAllDataRows(callback) |
성능 최적화
•
바이너리 포맷 지원 → 로드 속도 향상
•
Cached Bytes → 바이너리 작업 시 메모리 사전 할당
•
데이터 행 풀링(Object Pooling) → GC 부담 최소화
메모리 관리 메서드:
•
EnsureCachedBytesSize(size) : 캐시 메모리 확보
•
FreeCachedBytes() : 메모리 해제
이벤트 지원
•
OnReadDataSuccess: 데이터 성공적으로 로드됨
•
OnReadDataFailure: 데이터 로드 실패
•
OnReadDataUpdate: 로딩 진행 상황 업데이트
•
OnReadDataDependencyAsset: 종속 에셋 로드 시 호출
요약
데이터 테이블 시스템은 Unity Game Framework에서 구조화된 게임 데이터 관리를 위한 핵심 도구입니다.
•
데이터 로딩, 파싱, 접근을 분리해 클린 아키텍처 구현
•
텍스트/바이너리 지원 및 성능 최적화 기능 내장
•
리소스 시스템과 통합되어 효율적 관리 가능
혹시 이 번역 내용을 강의자료 요약용(슬라이드/문서) 으로 정리해드릴까요, 아니면 그대로 기술 매뉴얼 번역 스타일을 유지할까요?