코어 프레임워크 (Core Framework)
관련 소스 파일
•
GameFramework/Base/DataStruct/TypeNamePair.cs
•
GameFramework/Base/EventPool/BaseEventArgs.cs
•
GameFramework/Base/GameFrameworkEntry.cs
•
GameFramework/Base/GameFrameworkEventArgs.cs
•
GameFramework/Base/GameFrameworkLinkedList.cs
•
GameFramework/Base/GameFrameworkLinkedListRange.cs
•
GameFramework/Base/GameFrameworkMultiDictionary.cs
•
GameFramework/Base/ReferencePool/IReference.cs
•
GameFramework/Base/ReferencePool/ReferencePool.ReferenceCollection.cs
•
GameFramework/Base/ReferencePool/ReferencePool.cs
•
GameFramework/Base/ReferencePool/ReferencePoolInfo.cs
•
GameFramework/Base/Version/Version.IVersionHelper.cs
•
GameFramework/Base/Version/Version.cs
•
GameFramework/Sound/ResetSoundAgentEventArgs.cs
코어 프레임워크는 GameFramework 아키텍처의 기반을 형성하며, 모듈의 수명 주기를 관리하고, 메모리 사용을 최적화하며, 프레임워크의 작동을 조율하는 필수 서비스를 제공합니다.
이 구성 요소들은 프레임워크 내의 모든 다른 시스템을 뒷받침하며, 코드베이스 전반에서 일관된 아키텍처 패턴을 확립합니다.
주요 구성 요소
코어 프레임워크는 세 가지 주요 컴포넌트로 구성됩니다.
1.
GameFrameworkEntry – 중앙 진입점이자 모듈 조정자
2.
ReferencePool – 객체 풀링과 재사용을 위한 메모리 최적화 시스템
3.
Version – 프레임워크 및 게임 버전을 추적하는 버전 관리 시스템
모듈 아키텍처
GameFrameworkEntry
GameFrameworkEntry 클래스는 프레임워크 전체의 중앙 허브 역할을 합니다.
이 클래스는 모든 프레임워크 모듈의 우선순위가 있는 연결 리스트를 유지하며 다음 기능을 제공합니다.
•
모듈 등록 및 검색 – 요청 시 자동으로 생성
•
모듈 업데이트 – 매 프레임 우선순위 순서대로 각 모듈의 Update 메서드 호출
•
모듈 종료 – 우선순위 역순으로 Shutdown 호출하여 정리
진입점은 리플렉션을 사용하여 인터페이스 요청을 구체 클래스 구현과 자동 매핑하여, 깔끔한 의존성 해결을 구현합니다.
모듈 검색 예시:
// 인터페이스를 통해 모듈을 가져오거나 생성
IResourceManager resourceManager = GameFrameworkEntry.GetModule<IResourceManager>();
C#
복사
GetModule() 호출 시 과정:
1.
T가 GameFramework 네임스페이스의 인터페이스인지 확인
2.
인터페이스 이름에서 'I' 접두사를 제거하여 구체 클래스 이름 생성
3.
리플렉션으로 모듈 인스턴스를 찾거나 생성
4.
우선순위에 맞게 연결 리스트에 삽입
ReferencePool을 이용한 메모리 관리
ReferencePool은 효율적인 객체 풀링 시스템을 제공하여:
•
GC 부담 감소 (객체 재사용)
•
타입별 풀 관리
•
스레드 안전한 획득/반환
•
객체 사용 통계 추적
객체 풀에 들어가는 모든 객체는 IReference 인터페이스를 구현해야 하며, 이는 Clear() 메서드 하나를 정의하여 반환 시 객체 상태를 초기화합니다.
사용 패턴 예시:
MyEventArgs eventArgs = ReferencePool.Acquire<MyEventArgs>();
// 객체 사용 ...
ReferencePool.Release(eventArgs); // Clear() 자동 호출
C#
복사
각 타입별 객체 풀은 ReferenceCollection을 가지고, 내부 큐에 미사용 인스턴스를 저장합니다. 큐가 비어있으면 새 객체를 생성합니다.
버전 시스템
Version 컴포넌트는 프레임워크와 게임 버전을 제공합니다.
•
GameFrameworkVersion – 프레임워크 버전(고정 문자열)
•
GameVersion – 게임 버전(헬퍼를 통해 제공)
•
InternalGameVersion – 호환성 검사를 위한 정수 버전
게임은 IVersionHelper 구현체를 제공하여 자체 버전 정보를 노출해야 합니다.
커스텀 데이터 구조
코어 프레임워크에는 다음과 같은 특수 데이터 구조가 포함되어 있습니다.
데이터 구조 | 목적 | 주요 기능 |
GameFrameworkLinkedList<T> | 효율적인 연결 리스트 | 노드 캐싱으로 메모리 할당 감소 |
GameFrameworkLinkedListRange<T> | 연결 리스트의 구간 표현 | 특정 구간 노드 열거 지원 |
GameFrameworkMultiDictionary<TKey,TValue> | 키당 여러 값 저장 | 연결 리스트 구간 사용 |
이 자료구조들은 객체 풀, 이벤트 시스템, 리소스 관리 등 상위 시스템의 기반이 됩니다.
모듈 수명 주기
1.
생성 및 초기화 – GetModule<T>() 호출 시 생성, 우선순위에 따라 정렬
2.
업데이트 – 매 프레임 우선순위 순서대로 Update 호출
3.
종료 – 게임 종료 시 역순으로 Shutdown 호출
이 순서는 의존성을 가진 모듈 간 올바른 초기화와 정리를 보장합니다.
모범 사례
모듈 구현
•
GameFrameworkModule을 상속하는 인터페이스 정의
•
적절한 Priority 값 설정
•
Update와 Shutdown 메서드 구현
메모리 관리
•
자주 생성/파괴되는 객체에 IReference 구현
•
사용 후 반드시 ReferencePool.Release() 호출
•
Clear()에서 상태 초기화
모듈 의존성
•
GameFrameworkEntry.GetModule<T>() 사용으로 올바른 생성 순서 확보