์„œ๋น„์Šค
๊ต์œก ์ฒ ํ•™

Module Management

Abstract

๐Ÿ“Œ
๋ชจ๋“ˆ ๊ด€๋ฆฌ๋Š” "์ „์—ญ ์‹œ์Šคํ…œ ์Šค๋ฌด ๊ฐœ๋ฅผ ์–ด๋–ค ์ˆœ์„œ๋กœ ๋งŒ๋“ค๊ณ , ๋Œ๋ฆฌ๊ณ , ๋„๋Š”๊ฐ€"์— ๋Œ€ํ•œ ๋‹ต์ž…๋‹ˆ๋‹ค. ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์ด๊ฒƒ์„ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ํ•˜๋‚˜์™€ ์šฐ์„ ์ˆœ์œ„ ์ˆซ์ž ํ•˜๋‚˜๋กœ ํ’‰๋‹ˆ๋‹ค. ๊ฒŒ์ž„ ์ฝ”๋“œ๊ฐ€ ์ง์ ‘ ๋งŒ์งˆ ์ผ์€ ์—†์ง€๋งŒ, ๋ชจ๋“ˆ์ด ๊ฐฑ์‹ ๋˜๋Š” ์ˆœ์„œ๋ฅผ ์•Œ์•„์•ผ "์ด๋ฒคํŠธ๊ฐ€ ์™œ ๋‹ค์Œ ํ”„๋ ˆ์ž„์— ์˜ค๋Š”๊ฐ€" ๊ฐ™์€ ๋™์ž‘์ด ์ดํ•ด๋ฉ๋‹ˆ๋‹ค.
์‹ค์ œ ๊ฐฑ์‹  ์ˆœ์„œ (์ด ์—๋””์…˜์˜ ์ฝ”๋“œ ๊ธฐ์ค€)
๋งค ํ”„๋ ˆ์ž„ GameFrameworkEntry.Update() ๋Š” ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ๊ฒƒ๋ถ€ํ„ฐ ์ฐจ๋ก€๋กœ ๋ถ€๋ฆ…๋‹ˆ๋‹ค.
์ˆœ์„œ
๋ชจ๋“ˆ
Priority
์ด ์ˆœ์„œ์ธ ์ด์œ 
1
Event
7
์ง€๋‚œ ํ”„๋ ˆ์ž„์— ์Œ“์ธ ์ด๋ฒคํŠธ๋ฅผ ๊ฐ€์žฅ ๋จผ์ € ๋ฐฐ๋‹ฌํ•œ๋‹ค. ๋’ค์˜ ๋ชจ๋“ˆ๋“ค์ด ์ตœ์‹  ์ƒํƒœ๋กœ ์›€์ง์ธ๋‹ค
2
ObjectPool
6
๋งŒ๋ฃŒ๋œ ์ธ์Šคํ„ด์Šค๋ฅผ ์ •๋ฆฌํ•ด ๋‘”๋‹ค
3
Download
5
4
FileSystem
4
5
Scene
2
6
Fsm
1
์ƒํƒœ ์ „์ด๋ฅผ ์—”ํ‹ฐํ‹ฐ ๊ฐฑ์‹ ๋ณด๋‹ค ๋จผ์ € ์ฒ˜๋ฆฌํ•œ๋‹ค
7
Entity, UI, Sound, DataTable, Config, Localization, Setting, DataNode, Network, WebRequest
0
๊ฐ™์€ ์šฐ์„ ์ˆœ์œ„๋ผ๋ฆฌ๋Š” ๋จผ์ € ๋งŒ๋“ค์–ด์ง„ ์ˆœ์„œ
8
Debugger
-1
๋‹ค๋ฅธ ๋ชจ๋“ˆ์ด ๋‹ค ๋ˆ ๋’ค์˜ ์ƒํƒœ๋ฅผ ๋ณธ๋‹ค
9
Procedure
-2
๊ฒŒ์ž„ ํ๋ฆ„ ํŒ๋‹จ์€ ๋งจ ๋งˆ์ง€๋ง‰ โ€” ์ด ํ”„๋ ˆ์ž„์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ชจ๋‘ ๋ณธ ๋’ค ๊ฒฐ์ •ํ•œ๋‹ค
์ข…๋ฃŒ๋Š” ์ •ํ™•ํžˆ ์ด ์—ญ์ˆœ์ž…๋‹ˆ๋‹ค.
์ด ์ˆœ์„œ๊ฐ€ ๊ฒŒ์ž„ ์ฝ”๋“œ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ
โ€ข
Fire ํ•œ ์ด๋ฒคํŠธ๋Š” ๋‹ค์Œ ํ”„๋ ˆ์ž„ ๋งจ ์•ž์—์„œ ๋ฐฐ๋‹ฌ๋ฉ๋‹ˆ๋‹ค. ์—”ํ‹ฐํ‹ฐ์˜ OnUpdate ์•ˆ์—์„œ Fire ํ•˜๋ฉด, Event ๋ชจ๋“ˆ์€ ์ด๋ฒˆ ํ”„๋ ˆ์ž„์— ์ด๋ฏธ ๋Œ์•˜์œผ๋ฏ€๋กœ ๋‹ค์Œ ํ”„๋ ˆ์ž„ 1๋ฒˆ ์ˆœ์„œ์—์„œ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰์‹œ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋ฉด FireNow ๋ฅผ ์”๋‹ˆ๋‹ค.
โ€ข
FSM ์ƒํƒœ์˜ OnUpdate ๊ฐ€ ์—”ํ‹ฐํ‹ฐ์˜ OnUpdate ๋ณด๋‹ค ๋จผ์ € ๋ถˆ๋ฆฝ๋‹ˆ๋‹ค. ToyboxNightmare ์˜ ์ ์€ FSM ์ƒํƒœ(EnemyChaseState ๋“ฑ)์—์„œ ์ด๋™์„ ๊ฒฐ์ •ํ•˜๊ณ  ์—”ํ‹ฐํ‹ฐ ์ชฝ์—์„œ ๋‚˜๋จธ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ, ๊ฐ™์€ ํ”„๋ ˆ์ž„ ์•ˆ์—์„œ "์ƒํƒœ ํŒ๋‹จ โ†’ ์—”ํ‹ฐํ‹ฐ ๊ฐฑ์‹ " ์ˆœ์„œ๊ฐ€ ๋ณด์žฅ๋˜๋Š” ๊ฒƒ์€ Priority 1 > 0 ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
โ€ข
Procedure ๋Š” ๋งˆ์ง€๋ง‰์— ๋•๋‹ˆ๋‹ค. ProcedureMain.OnUpdate ์—์„œ "ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ฃฝ์—ˆ๋‚˜"๋ฅผ ํ™•์ธํ•  ๋•Œ๋Š” ์ด๋ฒˆ ํ”„๋ ˆ์ž„์˜ ์ „ํˆฌ ๊ฒฐ๊ณผ๊ฐ€ ๋ชจ๋‘ ๋ฐ˜์˜๋œ ๋’ค์ž…๋‹ˆ๋‹ค.
๋ชจ๋“ˆ์€ ์–ธ์ œ ๋งŒ๋“ค์–ด์ง€๋‚˜
GetModule<IEntityManager>() ๊ฐ€ ์ฒ˜์Œ ๋ถˆ๋ฆฌ๋Š” ์ˆœ๊ฐ„ ๋ฆฌํ”Œ๋ ‰์…˜์œผ๋กœ GameFramework.Entity.EntityManager ๋ฅผ ์ฐพ์•„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ๋Š” Unity ์ชฝ ๊ฐ ~Component ์˜ Awake ๊ฐ€ ์ž๊ธฐ ๋ชจ๋“ˆ์„ ์š”์ฒญํ•˜๋ฏ€๋กœ, GameFramework.prefab ์— ๋ถ™์–ด ์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ์˜ ๋ชจ๋“ˆ๋งŒ ๋งŒ๋“ค์–ด์ง‘๋‹ˆ๋‹ค. ํ”„๋ฆฌํŒน์—์„œ Network ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ง€์šฐ๋ฉด ๋„คํŠธ์›Œํฌ ๋ชจ๋“ˆ์€ ์ƒ์„ฑ์กฐ์ฐจ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
โš ๏ธ
๋ณธ๋ฌธ์„ ์ฝ์„ ๋•Œ ์ฃผ์˜ํ•  ์ 
โ€ข
๊ฒŒ์ž„ ์ฝ”๋“œ๋Š” ์ƒˆ ๋ชจ๋“ˆ์„ ๋งŒ๋“ค ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. GameFrameworkModule ์€ internal abstract ์ด๊ณ , GetModule<T>() ๋Š” GameFramework. ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ ์ธํ„ฐํŽ˜์ด์Šค๋งŒ ๋ฐ›์Šต๋‹ˆ๋‹ค. ํ™•์žฅ์€ Unity ์ชฝ GameFrameworkComponent ๋กœ ํ•ฉ๋‹ˆ๋‹ค(GameEntry์™€ ์ปดํฌ๋„ŒํŠธ ๊ด€๋ฆฌ).
โ€ข
๊ฒŒ์ž„ ์ฝ”๋“œ์—์„œ GameFrameworkEntry.GetModule<T>() ๋ฅผ ์ง์ ‘ ๋ถ€๋ฅผ ์ผ๋„ ์—†์Šต๋‹ˆ๋‹ค. GameEntry.GetComponent<EntityComponent>() ์ฒ˜๋Ÿผ Unity ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ†ตํ•ฉ๋‹ˆ๋‹ค. ๋ณธ๋ฌธ์˜ "๋ฒ ์ŠคํŠธ ํ”„๋ž™ํ‹ฐ์Šค"๋Š” ํ”„๋ ˆ์ž„์›Œํฌ ๋‚ด๋ถ€ ์ฝ”๋“œ๋ฅผ ์“ธ ๋•Œ์˜ ์ด์•ผ๊ธฐ์ž…๋‹ˆ๋‹ค.
โ€ข
๋ณธ๋ฌธ ๋์˜ ๋ชจ๋“ˆ ์š”์•ฝ ํ‘œ์—๋Š” EventManager, ProcedureManager, SceneManager, FileSystemManager, DebuggerManager ๊ฐ€ ๋น ์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„ ์ˆœ์„œ ํ‘œ๊ฐ€ ์ „์ฒด ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค.
โ€ข
ํ‘œ์˜ ResourceManager(์›์ž‘ Priority 3)๋Š” ์ด ์—๋””์…˜์—์„œ ๋ชจ๋“ˆ๋กœ ์ƒ์„ฑ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Addressables ๊ตฌํ˜„์ฒด๊ฐ€ ResourceComponent ์•ˆ์—์„œ ์ผ๋ฐ˜ ๊ฐ์ฒด๋กœ ๋งŒ๋“ค์–ด์ ธ ๋‹ค๋ฅธ ๋ชจ๋“ˆ์— ์ฃผ์ž…๋ฉ๋‹ˆ๋‹ค.

๋ชจ๋“ˆ ๊ด€๋ฆฌ (Module Management)

๊ด€๋ จ ์†Œ์Šค ํŒŒ์ผ (Relevant source files)

โ€ข GameFramework/Base/GameFrameworkEntry.cs

๋ชฉ์ ๊ณผ ๋ฒ”์œ„ (Purpose and Scope)

์ด ๋ฌธ์„œ๋Š” GameFramework์—์„œ ๋ชจ๋“  ์ฃผ์š” ์„œ๋ธŒ์‹œ์Šคํ…œ์„ ์กฐ์งํ™”ยท์ดˆ๊ธฐํ™”ยท์—…๋ฐ์ดํŠธยท์ข…๋ฃŒํ•˜๋Š” ๊ธฐ๋ฐ˜์ธ ๋ชจ๋“ˆ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“ˆ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์€ ์‹œ์Šคํ…œ ์ˆ˜๋ช…์ฃผ๊ธฐ๋ฅผ ์ผ๊ด€๋˜๊ฒŒ ๋‹ค๋ฃจ๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜๊ณ , ํ”„๋ ˆ์ž„์›Œํฌ ๋Šฅ๋ ฅ์„ ์œ„ํ•œ ๋ช…ํ™•ํ•œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.
๋ชจ๋“ˆ ์‹œ์Šคํ…œ๊ณผ ํ•จ๊ป˜ ๋™์ž‘ํ•˜๋Š” ๊ฐ์ฒด ์ฐธ์กฐ ํ’€๋ง์— ๋Œ€ํ•œ ์ •๋ณด๋Š” Reference Pool์„ ์ฐธ์กฐํ•˜์„ธ์š”.

๊ฐœ์š” (Overview)

๋ชจ๋“ˆ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์€ ๋‘ ๊ฐ€์ง€ ํ•ต์‹ฌ ๊ตฌ์„ฑ์š”์†Œ GameFrameworkEntry์™€ GameFrameworkModule์„ ์ค‘์‹ฌ์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์‹œ์Šคํ…œ์€ ๋ชจ๋“  ํ”„๋ ˆ์ž„์›Œํฌ ์„œ๋ธŒ์‹œ์Šคํ…œ์˜ ์ž๋™ ์ƒ์„ฑ, ์šฐ์„ ์ˆœ์œ„ ๊ธฐ๋ฐ˜ ์—…๋ฐ์ดํŠธ, ์งˆ์„œ ์žˆ๋Š” ์ข…๋ฃŒ๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋ฉด์„œ, ์‹œ์Šคํ…œ ๊ฐ„์˜ ์•ฝํ•œ ๊ฒฐํ•ฉ(loose coupling) ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.
์ถœ์ฒ˜(Sources):
GameFramework/Base/GameFrameworkEntry.cs 16โ€“132

๋ชจ๋“ˆ ์•„ํ‚คํ…์ฒ˜ (Module Architecture)

์ด ๋ชจ๋“ˆ ์‹œ์Šคํ…œ์€ ๋‹จ์ˆœํ•˜์ง€๋งŒ ํšจ๊ณผ์ ์ธ ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค:
โ€ข
๋ชจ๋“  ํ”„๋ ˆ์ž„์›Œํฌ ๊ธฐ๋Šฅ์€ ํŠนํ™” ๋ชจ๋“ˆ์— ์บก์Аํ™”๋ฉ๋‹ˆ๋‹ค.
โ€ข
๊ฐ ๋ชจ๋“ˆ์€ ์ถ”์ƒ ๊ธฐ๋ณธ ํด๋ž˜์Šค GameFrameworkModule์„ ์ƒ์†ํ•ฉ๋‹ˆ๋‹ค.
โ€ข
๋ชจ๋“ˆ์€ ์ •์  ํด๋ž˜์Šค GameFrameworkEntry๋ฅผ ํ†ตํ•ด ์ž๋™์œผ๋กœ ์ƒ์„ฑยท๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค.
โ€ข
๊ฒŒ์ž„ ์ฝ”๋“œ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ๋ชจ๋“ˆ๊ณผ ์ƒํ˜ธ์ž‘์šฉํ•˜์—ฌ ์•ฝํ•œ ๊ฒฐํ•ฉ์„ ์ด‰์ง„ํ•ฉ๋‹ˆ๋‹ค.
์ถœ์ฒ˜(Sources):
GameFramework/Base/GameFrameworkEntry.cs 16โ€“132

๋ชจ๋“ˆ ์กฐํšŒ ์‹œ์Šคํ…œ (Module Retrieval System)

๋ชจ๋“ˆ ์กฐํšŒ ์‹œ์Šคํ…œ์€ ๊ฒŒ์ž„ ์ฝ”๋“œ๊ฐ€ GetModule<T>() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์–ด๋–ค ๋ชจ๋“ˆ์ด๋“  ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. ์š”์ฒญ๋œ ๋ชจ๋“ˆ์ด ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜์–ด, ๋ชจ๋“ˆ์€ ํ•„์š”ํ•  ๋•Œ๋งŒ ์ดˆ๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค.
๋ชจ๋“ˆ ์กฐํšŒ์˜ ํ•ต์‹ฌ ํŠน์„ฑ:
โ€ข
๋ชจ๋“ˆ์€ ์ธํ„ฐํŽ˜์ด์Šค(์˜ˆ: IResourceManager) ๋กœ ์กฐํšŒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
โ€ข
๊ตฌ์ฒด ๊ตฌํ˜„ ํด๋ž˜์Šค๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ž๋™์œผ๋กœ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.
โ€ข
๋ชจ๋“ˆ ์ธ์Šคํ„ด์Šค๋Š” ์ง€์—ฐ ์ƒ์„ฑ(์ตœ์ดˆ ์š”์ฒญ ์‹œ) ๋ฉ๋‹ˆ๋‹ค.
โ€ข
๋ชจ๋“ˆ์€ ์•ฝํ•œ ๊ฒฐํ•ฉ์„ ์œ„ํ•ด ์ธํ„ฐํŽ˜์ด์Šค ํƒ€์ž…์œผ๋กœ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.
์ถœ์ฒ˜(Sources):
GameFramework/Base/GameFrameworkEntry.cs 55โ€“76, 84โ€“95

๋ชจ๋“ˆ ์ƒ์„ฑ ๊ณผ์ • (Module Creation Process)

๋ชจ๋“ˆ์ด ์ฒ˜์Œ ์š”์ฒญ๋˜๋ฉด ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค:
1.
๋ฆฌํ”Œ๋ ‰์…˜์œผ๋กœ ๋ชจ๋“ˆ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
2.
๋ชจ๋“ˆ์˜ ์šฐ์„ ์ˆœ์œ„์— ๋”ฐ๋ผ ๋ชจ๋“ˆ ๋ชฉ๋ก์—์„œ ์‚ฝ์ž… ์œ„์น˜๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.
3.
๋ชจ๋“ˆ์„ ์ ์ ˆํ•œ ์œ„์น˜์— ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค.
4.
์ƒ์„ฑ๋œ ๋ชจ๋“ˆ์„ ํ˜ธ์ถœ์ž์—๊ฒŒ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
์ด๋ฅผ ํ†ตํ•ด ๋ชจ๋“ˆ์€ ์š”์ฒญ ์‹œ์ ์— ์ƒ์„ฑ๋˜๊ณ , ์—…๋ฐ์ดํŠธ๋ฅผ ์œ„ํ•ด ์˜ฌ๋ฐ”๋ฅธ ์ˆœ์„œ๋กœ ์ •๋ ฌ๋ฉ๋‹ˆ๋‹ค.
์ถœ์ฒ˜(Sources):
GameFramework/Base/GameFrameworkEntry.cs 102โ€“131

๋ชจ๋“ˆ ์ˆ˜๋ช…์ฃผ๊ธฐ ๊ด€๋ฆฌ (Module Lifecycle Management)

๋ชจ๋“ˆ ์—…๋ฐ์ดํŠธ ์ˆœ์„œ (Module Update Sequence)

๋ชจ๋“ˆ ์‹œ์Šคํ…œ์€ GameFrameworkEntry.Update() ๋ฅผ ํ†ตํ•ด ์ค‘์•™์ง‘์ค‘์‹ ์—…๋ฐ์ดํŠธ ์ฒ˜๋ฆฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฉ”์„œ๋“œ๋Š”:
โ€ข
๋ชจ๋“  ๋ชจ๋“ˆ์„ ์šฐ์„ ์ˆœ์œ„ ์ˆœ์„œ๋กœ ์ˆœํšŒํ•˜๊ณ ,
โ€ข
๊ฐ ๋ชจ๋“ˆ์˜ Update()๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด์„œ ๊ฒฝ๊ณผ ์‹œ๊ฐ„ ๊ฐ’์„ ์ „๋‹ฌํ•˜๋ฉฐ,
โ€ข
๋ชจ๋“ˆ์ด ํ•„์š”ํ•œ ์ฃผ๊ธฐ์  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
์ฆ‰, ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ๋ชจ๋“ˆ์ด ๋‚ฎ์€ ๋ชจ๋“ˆ๋ณด๋‹ค ๋จผ์ € ํ•ญ์ƒ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค.
์ถœ์ฒ˜(Sources):
GameFramework/Base/GameFrameworkEntry.cs 25โ€“31

๋ชจ๋“ˆ ์ข…๋ฃŒ ์ˆœ์„œ (Module Shutdown Sequence)

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ข…๋ฃŒ ์‹œ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” GameFrameworkEntry.Shutdown() ์„ ํ†ตํ•ด ์ฒด๊ณ„์ ์ธ ์ •๋ฆฌ๋ฅผ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค:
โ€ข
๋ชจ๋“  ๋ชจ๋“ˆ์„ ์šฐ์„ ์ˆœ์œ„์˜ ์—ญ์ˆœ(๋งˆ์ง€๋ง‰๋ถ€ํ„ฐ ์ฒ˜์Œ) ์œผ๋กœ ์ˆœํšŒํ•˜๊ณ ,
โ€ข
๊ฐ ๋ชจ๋“ˆ์˜ Shutdown()์„ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
โ€ข
๋ชจ๋“  ์ข…๋ฃŒ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ๋ชจ๋“ˆ ๋ชฉ๋ก์„ ๋น„์šฐ๊ณ ,
โ€ข
(์˜ˆ: ๋ ˆํผ๋Ÿฐ์Šค ํ’€ ์ •๋ฆฌ ๋“ฑ) ์ถ”๊ฐ€ ์ •๋ฆฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
์ด๋กœ์จ ๋‚ฎ์€ ์šฐ์„ ์ˆœ์œ„ ๋ชจ๋“ˆ์ด ๊ทธ์— ์˜์กดํ•  ์ˆ˜ ์žˆ๋Š” ๋†’์€ ์šฐ์„ ์ˆœ์œ„ ๋ชจ๋“ˆ๋ณด๋‹ค ๋จผ์ € ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.
์ถœ์ฒ˜(Sources):
GameFramework/Base/GameFrameworkEntry.cs 36โ€“47

๋ชจ๋“ˆ ์šฐ์„ ์ˆœ์œ„ (Module Prioritization)

๋ชจ๋“ˆ์€ ์šฐ์„ ์ˆœ์œ„๋กœ ์ •๋ ฌ๋œ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์— ๋ณด๊ด€๋˜๋ฉฐ, ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ๋ชจ๋“ˆ์ด ๋ชฉ๋ก์˜ ์•ž์ชฝ์— ์œ„์น˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ •๋ ฌ์€ ๋‹ค์Œ์— ์˜ํ–ฅ์„ ์ค๋‹ˆ๋‹ค:
โ€ข
์—…๋ฐ์ดํŠธ ์ˆœ์„œ: ๋†’์€ ์šฐ์„ ์ˆœ์œ„ ๋ชจ๋“ˆ์ด ๋จผ์ € ์—…๋ฐ์ดํŠธ
โ€ข
์ข…๋ฃŒ ์ˆœ์„œ: ๋‚ฎ์€ ์šฐ์„ ์ˆœ์œ„ ๋ชจ๋“ˆ์ด ๋จผ์ € ์ข…๋ฃŒ
์ƒˆ ๋ชจ๋“ˆ์ด ์ƒ์„ฑ๋˜๋ฉด, ๊ทธ ๋ชจ๋“ˆ์˜ Priority ์†์„ฑ์— ๋”ฐ๋ผ ์˜ฌ๋ฐ”๋ฅธ ์œ„์น˜์— ์‚ฝ์ž…๋ฉ๋‹ˆ๋‹ค.
์ถœ์ฒ˜(Sources):
GameFramework/Base/GameFrameworkEntry.cs 110โ€“128

๊ตฌํ˜„ ์„ธ๋ถ€์‚ฌํ•ญ (Implementation Details)

๋ชจ๋“ˆ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์€ ๋‹ค์Œ ์ž๋ฃŒ๊ตฌ์กฐ์™€ ํŒจํ„ด์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค:
โ€ข
GameFrameworkLinkedList: ๋ชจ๋“ˆ ์ธ์Šคํ„ด์Šค๋ฅผ ์šฐ์„ ์ˆœ์œ„ ์ˆœ์„œ๋กœ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ํŠน์ˆ˜ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ
โ€ข
๋ชจ๋“ˆ ์ธํ„ฐํŽ˜์ด์Šค ๋„ค์ด๋ฐ ๊ทœ์น™: ์ธํ„ฐํŽ˜์ด์Šค๋Š” "I[ModuleName]", ๊ตฌํ˜„ ํด๋ž˜์Šค๋Š” "[ModuleName]"
โ—ฆ
์˜ˆ: IResourceManager โ†’ ResourceManager
โ€ข
๋ฆฌํ”Œ๋ ‰์…˜ ๊ธฐ๋ฐ˜ ์ธ์Šคํ„ด์Šคํ™”: ์š”์ฒญ๋œ ์ธํ„ฐํŽ˜์ด์Šค ํƒ€์ž…์—์„œ ๊ตฌํ˜„ ํด๋ž˜์Šค ์ด๋ฆ„์„ ์œ ๋„ํ•ด ์ž๋™ ์ƒ์„ฑ
์˜ˆ์‹œ:
// Interface name: IResourceManager // Derived module name: ResourceManager string moduleName = Utility.Text.Format("{0}.{1}", interfaceType.Namespace, interfaceType.Name.Substring(1)); Type moduleType = Type.GetType(moduleName);
C#
๋ณต์‚ฌ
์ถœ์ฒ˜(Sources):
GameFramework/Base/GameFrameworkEntry.cs 18, 68โ€“75

๋ชจ๋“ˆ ์‚ฌ์šฉ ๋ฒ ์ŠคํŠธ ํ”„๋ž™ํ‹ฐ์Šค (Best Practices for Module Usage)

โ€ข
ํ•ญ์ƒ GameFrameworkEntry.GetModule<T>() ๋ฅผ ์‚ฌ์šฉํ•ด ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋ชจ๋“ˆ์— ์ ‘๊ทผํ•˜์„ธ์š”.
โ€ข
์”ฌ ์‚ฌ์ด์—์„œ ๋ชจ๋“ˆ ์ธ์Šคํ„ด์Šค๋ฅผ ์บ์‹ฑํ•˜์ง€ ๋งˆ์„ธ์š”(์ƒํƒœ ๋ฌธ์ œ ๋ฐฉ์ง€).
โ€ข
์šฐ์„ ์ˆœ์œ„๋ฅผ ์ •ํ•  ๋•Œ ๋ชจ๋“ˆ ๊ฐ„ ์˜์กด์„ฑ์„ ๊ณ ๋ คํ•˜์„ธ์š”.
โ€ข
๋ชจ๋“ˆ์€ ์‹œ์ž‘ ์‹œ์ ์ด ์•„๋‹ˆ๋ผ, ์ตœ์ดˆ ์š”์ฒญ ์‹œ ์ธ์Šคํ„ด์Šคํ™”๋œ๋‹ค๋Š” ์ ์„ ๊ธฐ์–ตํ•˜์„ธ์š”.

๋ชจ๋“ˆ ์š”์•ฝ (Module Summary)

Module
Interface
Purpose
ResourceManager
IResourceManager
๊ฒŒ์ž„ ์—์…‹์˜ ๋กœ๋“œ/์–ธ๋กœ๋“œ/์—…๋ฐ์ดํŠธ ์ฒ˜๋ฆฌ
EntityManager
IEntityManager
๊ฒŒ์ž„ ์—”ํ„ฐํ‹ฐ์™€ ๊ทธ ์ˆ˜๋ช…์ฃผ๊ธฐ ๊ด€๋ฆฌ
UIManager
IUIManager
UI ํผ, ๊ทธ๋ฃน, ๋ ˆ์ด์–ด ์ œ์–ด
SoundManager
ISoundManager
์˜ค๋””์˜ค ์žฌ์ƒ ๋ฐ ์„ค์ • ๊ด€๋ฆฌ
ConfigManager
IConfigManager
๊ฒŒ์ž„ ์„ค์ • ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ
DataTableManager
IDataTableManager
๊ตฌ์กฐํ™”๋œ ๊ฒŒ์ž„ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ
LocalizationManager
ILocalizationManager
์–ธ์–ด๋ณ„ ๋ฆฌ์†Œ์Šค ์ œ๊ณต
NetworkManager
INetworkManager
๋„คํŠธ์›Œํฌ ํ†ต์‹  ๊ด€๋ฆฌ
DownloadManager
IDownloadManager
ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ ์ฒ˜๋ฆฌ
WebRequestManager
IWebRequestManager
์›น ์š”์ฒญ ๊ด€๋ฆฌ
ObjectPoolManager
IObjectPoolManager
์„ฑ๋Šฅ์„ ์œ„ํ•œ ์˜ค๋ธŒ์ ํŠธ ํ’€ ์ œ๊ณต
FsmManager
IFsmManager
์œ ํ•œ ์ƒํƒœ ๊ธฐ๊ณ„(FSM) ๊ด€๋ฆฌ
SettingManager
ISettingManager
์ง€์† ์‚ฌ์šฉ์ž ์„ค์ • ๊ด€๋ฆฌ
DataNodeManager
IDataNodeManager
๊ณ„์ธต์  ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ๊ด€๋ฆฌ
์ถœ์ฒ˜(Sources):
GameFramework/Base/GameFrameworkEntry.cs 16โ€“132