Company
교육 철학

GameEntry와 컴포넌트 관리

GameEntry와 컴포넌트 관리

관련 소스 파일
GameFramework.prefab
GameFramework.prefab.meta
Scripts/Runtime/Base/BaseComponent.cs
Scripts/Runtime/Base/GameEntry.cs
Scripts/Runtime/Entity/Entity.cs
Scripts/Runtime/Entity/EntityLogic.cs
Scripts/Runtime/UI/UIForm.cs
Scripts/Runtime/UI/UIFormLogic.cs
Scripts/Runtime/Utility/DefaultLogHelper.cs
Scripts/Runtime/Utility/Log.cs

목적과 범위

이 문서는 Unity Game Framework의 중앙 관리 시스템을 설명하며, GameEntry 정적 클래스와 그것이 컴포넌트를 어떻게 관리하는지에 초점을 맞춥니다. GameEntry는 모든 프레임워크 컴포넌트에 대한 중앙 접근 지점으로 작동하며, 게임 코드 전체에서 기능을 일관되게 접근할 수 있는 방법을 제공합니다.
각 컴포넌트가 사용하는 특정 헬퍼 패턴에 대한 세부 사항은 Helper Pattern을 참조하세요.

GameEntry 개요

GameEntry는 프레임워크 내 모든 GameFrameworkComponent의 레지스트리이자 접근 지점 역할을 하는 정적 클래스입니다. Unity의 GetComponent 또는 FindObjectOfType 메서드를 통해 컴포넌트에 접근하는 대신, GameEntry는 싱글톤과 유사한 레지스트리를 제공하여 코드 어디서나 컴포넌트에 접근할 수 있게 합니다.
출처:
Scripts/Runtime/Base/GameEntry.cs

컴포넌트 등록 시스템

GameEntry는 모든 등록된 컴포넌트의 연결 리스트를 유지합니다. GameFrameworkComponent가 초기화될 때, 내부 RegisterComponent 메서드를 사용하여 스스로를 GameEntry에 등록합니다.
출처:
Scripts/Runtime/Base/GameEntry.cs 122-145

프레임워크 컴포넌트 접근

GameEntry는 컴포넌트를 검색하기 위해 세 가지 메서드를 제공합니다:
// 제네릭 타입 매개변수로 컴포넌트 가져오기 T GetComponent<T>() where T : GameFrameworkComponent // Type 객체로 컴포넌트 가져오기 GameFrameworkComponent GetComponent(Type type) // 타입 이름으로 컴포넌트 가져오기 GameFrameworkComponent GetComponent(string typeName)
C#
복사
구현은 등록된 컴포넌트를 순회하며 요청된 타입과 각 컴포넌트의 타입을 비교합니다.
출처:
Scripts/Runtime/Base/GameEntry.cs 33-79

BaseComponent: 프레임워크 초기화

BaseComponent는 코어 프레임워크를 초기화하는 특수한 GameFrameworkComponent입니다. 모든 다른 컴포넌트들이 의존하는 기반 역할을 합니다.
주요 책임:
헬퍼 클래스 초기화(TextHelper, VersionHelper, LogHelper 등)
프레임워크 설정 구성(프레임 레이트, 백그라운드 실행 등)
GameFrameworkEntry(코어 비-Unity 프레임워크) 초기화
매 프레임마다 프레임워크 업데이트
출처:
Scripts/Runtime/Base/BaseComponent.cs 185-245

컴포넌트 계층 구조

프레임워크는 포괄적인 컴포넌트 세트를 제공하며, 모두 GameEntry를 통해 접근할 수 있습니다. GameFramework.prefab 파일은 이 모든 컴포넌트를 미리 구성된 상태로 포함합니다.
출처:
GameFramework.prefab 12-611
Scripts/Runtime/Base/GameEntry.cs 19-146

프레임워크 컴포넌트 표

컴포넌트
목적
BaseComponent
프레임워크 초기화 및 설정
ResourceComponent
리소스 로딩 및 관리
ConfigComponent
설정 데이터 관리
DataTableComponent
게임 데이터 테이블 관리
DebuggerComponent
런타임 디버깅 도구
DownloadComponent
파일 다운로드 작업
EntityComponent
게임 엔티티 관리
EventComponent
이벤트 디스패치 시스템
FileSystemComponent
파일 시스템 작업
FSMComponent
유한 상태 기계 시스템
LocalizationComponent
로컬라이제이션 시스템
NetworkComponent
네트워크 통신
ObjectPoolComponent
오브젝트 풀링 시스템
ProcedureComponent
게임 프로시저(상태) 관리
ReferencePoolComponent
레퍼런스 풀링 시스템
SceneComponent
씬 로딩 및 관리
SettingComponent
게임 설정 관리
SoundComponent
오디오 시스템
UIComponent
UI 관리 시스템
WebRequestComponent
웹 요청 작업
출처:
GameFramework.prefab 12-611

프레임워크 종료 프로세스

GameEntry는 프레임워크를 올바르게 종료하기 위해 Shutdown 메서드를 제공합니다.
출처:
Scripts/Runtime/Base/GameEntry.cs 85-116

UI 및 엔티티 시스템에서 GameEntry 사용 방법

UI와 엔티티 시스템은 모두 GameEntry를 통해 컴포넌트에 접근하는 유사한 패턴을 따릅니다.
UI 시스템 예시
출처: Scripts/Runtime/UI/UIFormLogic.cs, Scripts/Runtime/UI/UIForm.cs
엔티티 시스템 예시
출처: Scripts/Runtime/Entity/EntityLogic.cs, Scripts/Runtime/Entity/Entity.cs

모범 사례

Unity의 컴포넌트 접근 메서드 대신 항상 GameEntry를 통해 컴포넌트에 접근할 것
컴포넌트를 GameEntry에 수동으로 등록하지 말 것 — 컴포넌트는 초기화 시 스스로 등록해야 함
직접 구현하기보다 해당 작업에 적합한 프레임워크 컴포넌트를 사용할 것
컴포넌트 의존 순서를 기억할 것: BaseComponent가 먼저 초기화되고, 그 후 다른 컴포넌트들이 초기화됨
출처:
Scripts/Runtime/Base/GameEntry.cs
Scripts/Runtime/Base/BaseComponent.cs

Low Memory Handling

BaseComponent는 모바일 기기에서 저메모리 상황을 위한 특수한 핸들러를 포함합니다.
출처:
Scripts/Runtime/Base/BaseComponent.cs 408-423

결론

GameEntry와 컴포넌트 관리 시스템은 Unity Game Framework의 중추를 형성합니다. 컴포넌트 접근과 관리를 중앙화함으로써, 게임 코드 어디서든 프레임워크 기능을 간소화된 방식으로 활용할 수 있으며 동시에 관심사의 올바른 분리를 유지할 수 있습니다.