Support Systems (지원 시스템)
관련 소스 파일
•
GameFramework/Base/EventPool/EventPool.cs
•
GameFramework/Base/TaskPool/ITaskAgent.cs
•
GameFramework/Base/TaskPool/TaskBase.cs
•
GameFramework/Base/TaskPool/TaskInfo.cs
•
GameFramework/Base/TaskPool/TaskPool.cs
•
GameFramework/Download/DownloadManager.DownloadTask.cs
•
GameFramework/Entity/EntityManager.EntityGroup.cs
•
GameFramework/Entity/EntityManager.EntityInfo.cs
•
GameFramework/Entity/IEntityGroup.cs
•
GameFramework/Entity/IEntityManager.cs
•
GameFramework/Fsm/Fsm.cs
•
GameFramework/Fsm/FsmManager.cs
•
GameFramework/ObjectPool/IObjectPool.cs
•
GameFramework/ObjectPool/IObjectPoolManager.cs
•
GameFramework/ObjectPool/ObjectPoolBase.cs
•
GameFramework/ObjectPool/ObjectPoolManager.cs
•
GameFramework/Resource/ResourceManager.ResourceLoader.LoadResourceTaskBase.cs
•
GameFramework/UI/IUIGroup.cs
•
GameFramework/UI/IUIManager.cs
•
GameFramework/UI/UIManager.UIGroup.cs
•
GameFramework/WebRequest/WebRequestManager.WebRequestTask.cs
개요
Game Framework의 지원 시스템(Support Systems) 은 다른 모듈들이 의존할 수 있는 기본 인프라를 제공합니다.
이 시스템들은 공통적인 문제를 다루며, 효율성과 유지보수성, 아키텍처적 일관성을 강화하는 핵심 패턴들을 구현합니다.
포함된 시스템:
•
이벤트 시스템 (Event System)
•
작업 시스템 (Task System)
•
객체 풀 시스템 (Object Pool System)
•
유한 상태 기계(FSM) 시스템
이 페이지에서는 고수준의 게임플레이 및 애플리케이션 기능을 가능하게 하는 핵심 지원 시스템의 설계와 사용법을 설명합니다.
UI, Entity, Resource 관리 같은 특정 게임 시스템은 각 페이지에서 다룹니다.
지원 시스템 개요
Game Framework가 제공하는 지원 시스템은 다음과 같습니다:
•
Event System (EventPool): 타입 안전한 메시지 전달 (Observer 패턴 기반)
•
Task System (TaskPool): 우선순위 기반 스케줄링을 통한 비동기 작업 관리
•
Object Pool System: 객체 재사용을 통한 메모리 할당 감소
•
Finite State Machine System: 상태 기반 동작 모델링 및 전환
Event System
Event System은 Observer 패턴을 타입 안전하게 구현하여 컴포넌트 간의 느슨한 결합을 지원합니다.
직접 참조 없이 메시지를 전달할 수 있습니다.
아키텍처
•
핵심 클래스: EventPool<T>
•
구독 관리 및 이벤트 디스패치 담당
특징:
•
타입 안전성 (이벤트 풀마다 특정 EventArgs 타입 사용)
•
다양한 이벤트 모드 지원 (중복 핸들러 허용 여부 등)
•
비동기 이벤트: Fire() → 큐에 등록 후 다음 Update에서 처리
•
즉시 이벤트: FireNow() → 즉시 핸들러 호출
•
스레드 안전성: 비동기 이벤트는 락으로 보장
•
이벤트 처리 후, 인자는 Reference Pool로 반환
사용 예시
•
Entity, UI, Sound Manager → 상태 변화 알림
•
Resource Manager → 로딩 진행 보고
•
Network System → 수신 데이터 전달
Task System
Task System은 비동기 작업을 우선순위 기반으로 관리합니다.
리소스 로딩, 네트워크 요청, 파일 다운로드 등 시간이 소요되는 작업에 사용됩니다.
아키텍처
•
핵심 클래스: TaskPool<T>
•
에이전트(Task Agent) 풀을 관리하며 작업을 처리
•
작업 우선순위 기반 스케줄링
구성 요소:
•
TaskBase: 모든 작업의 추상 클래스 (우선순위, 사용자 데이터 포함)
•
TaskPool: 에이전트 및 대기 작업 관리, 스케줄링 담당
•
ITaskAgent: 작업을 실제로 처리하는 에이전트 인터페이스
•
TaskInfo: 작업 정보를 담는 구조체
사용 예시
•
ResourceManager → 리소스 로딩
•
DownloadManager → 파일 다운로드
•
WebRequestManager → 웹 요청 처리
Object Pool System
Object Pool System은 객체 재사용을 통해 메모리 할당과 GC를 줄여 성능을 최적화합니다.
아키텍처
Usage patterns:
1.
Create Pool: System creates a pool with specific settings
2.
Register Objects: Objects are registered with the pool
3.
Spawn Objects: Objects are acquired from the pool when needed
4.
Unspawn Objects: Objects are returned to the pool when no longer needed
5.
Auto-release: Unused objects are automatically released to free memory
•
핵심 클래스: ObjectPoolManager
•
다양한 객체 풀을 관리
•
풀마다 용량(capacity), 자동 해제 주기, 만료 시간 설정 가능
구성 요소:
•
ObjectPoolManager: 풀들의 중앙 관리자
•
ObjectPoolBase: 모든 객체 풀의 기반 클래스
•
IObjectPool: 타입별 객체 풀 인터페이스
•
ObjectBase: 풀링 가능한 객체의 기반 클래스
특징:
•
Single/Multi Spawn: 객체 중복 반환 가능 여부 설정
•
Auto-release: 특정 시간이 지나면 자동 반환
•
Priority 기반 해제: 용량 초과 시 낮은 우선순위 객체부터 해제
•
Expiration: 만료 시간 초과 객체 자동 해제
사용 예시
•
Entity Manager: 엔티티 재사용 관리
•
UI Manager: UI 객체 관리
•
Resource Loader: 리소스 관리
Finite State Machine (FSM) System
FSM 시스템은 상태 기반 행동을 모델링하여 복잡한 객체의 라이프사이클과 동작을 관리합니다.
Usage pattern:
1.
Create FSM: Define states and create an FSM with an owner
2.
Start FSM: Begin the state machine with an initial state
3.
Update: The current state is updated each frame
4.
Transition: States can trigger transitions to other states
5.
Destroy: When no longer needed, the FSM can be destroyed
아키텍처
•
핵심 클래스: FsmManager
•
모든 FSM을 관리
•
FSM은 소유자(Owner), 상태(States), 상태 전환(Transitions)으로 구성
구성 요소:
•
FsmManager: FSM 중앙 관리자
•
FsmBase: 모든 FSM의 추상 클래스
•
Fsm<T>: 제네릭 FSM 구현
•
FsmState: FSM의 상태 기본 클래스
특징:
•
타입 안전성: FSM과 상태는 Owner 타입과 강하게 연결됨
•
데이터 공유: FSM 내에서 모든 상태가 접근 가능한 데이터 저장 가능
•
라이프사이클 메서드: Entry, Exit, Update 지원
•
Named FSM: 동일한 Owner 타입에 여러 FSM 생성 가능
사용 예시
•
캐릭터 상태 관리 (Idle, Walk, Attack 등)
•
게임 상태 관리 (Menu, Gameplay, Pause 등)
•
UI 상태 관리 (Show, Hide, Transition 등)
•
시스템 상태 관리 (Initializing, Running, Shutdown 등)
프레임워크와의 통합
지원 시스템은 GameFramework의 모듈 관리 시스템과 통합됩니다.
•
모든 모듈은 GameFrameworkModule 상속
•
GameFrameworkEntry에 등록되어 생명주기 관리
생명주기:
1.
Initialization: 초기화 및 등록
2.
Update: 우선순위 순으로 매 프레임 업데이트
3.
Shutdown: 종료 시 역순으로 정리
•
Object Pool, FSM은 모듈로 통합
•
Event, Task는 다른 모듈 내부에서 활용
요약
지원 시스템은 Game Framework의 상위 레벨 시스템을 가능하게 하는 핵심 인프라입니다.
시스템 | 주요 목적 | 핵심 클래스 | 사용 모듈 |
Event System | 컴포넌트 간 메시지 전달 | EventPool | Entity, UI, Sound |
Task System | 비동기 작업 관리 | TaskPool, TaskBase | Resource, Download, WebRequest |
Object Pool | 객체 재사용 | ObjectPoolManager, IObjectPool | Entity, UI, Resource |
FSM System | 상태 기반 동작 모델링 | FsmManager, Fsm | 게임 상태, 엔티티 동작 |
장점:
•
이벤트 & FSM을 통한 느슨한 결합
•
풀링 & 효율적 작업 관리로 성능 최적화
•
관심사 분리를 통한 구조적 설계
•
인터페이스와 추상 기반 클래스 덕분에 확장성 높음
→ 이 지원 시스템들은 Game Framework의 모든 다른 시스템의 기초를 형성합니다.