Company
교육 철학

데이터 테이블 (Data Tables)

데이터 테이블 (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#
복사

리소스 시스템과의 통합

DefaultDataTableHelperResourceComponent를 통해 에셋 로딩
데이터 테이블이 필요 없어지면 자동 언로드

관리 기능

테이블 관리

작업
설명
메서드
존재 확인
테이블 존재 여부 확인
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에서 구조화된 게임 데이터 관리를 위한 핵심 도구입니다.
데이터 로딩, 파싱, 접근을 분리해 클린 아키텍처 구현
텍스트/바이너리 지원 및 성능 최적화 기능 내장
리소스 시스템과 통합되어 효율적 관리 가능
간단한 아이템 목록부터 RPG의 대규모 데이터베이스까지 확장 가능한 유연한 구조를 제공합니다.
혹시 이 번역 내용을 강의자료 요약용(슬라이드/문서) 으로 정리해드릴까요, 아니면 그대로 기술 매뉴얼 번역 스타일을 유지할까요?