Company
교육 철학

Support Systems (지원 시스템)

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의 모든 다른 시스템의 기초를 형성합니다.