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

Entity Framework

Abstract

๐Ÿ“Œ
ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋ณด๊ณ  ๋“ฃ๋Š” ๊ฒƒ์€ ์…‹ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค โ€” ์›”๋“œ์— ์žˆ๋Š” ๊ฒƒ(Entity), ํ™”๋ฉด์— ๋ฎ์ด๋Š” ๊ฒƒ(UI), ๊ท€๋กœ ๋“ค๋ฆฌ๋Š” ๊ฒƒ(Sound). ์ด ํŽ˜์ด์ง€๋Š” ๊ทธ ์„ธ ๋งค๋‹ˆ์ €๋ฅผ ํ•œ๊บผ๋ฒˆ์— ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค. ์š”์ ์€ ์…‹์ด ๊ฐ™์€ ํ‹€๋กœ ๋งŒ๋“ค์–ด์ ธ ์žˆ์–ด์„œ ํ•˜๋‚˜๋ฅผ ์ตํžˆ๋ฉด ๋‚˜๋จธ์ง€๋Š” ์ด๋ฆ„๋งŒ ๋ฐ”๊ฟ” ์ฝ์œผ๋ฉด ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์„ธ ๋งค๋‹ˆ์ €์˜ ๊ณตํ†ต ํ‹€
Entity
UI
Sound
์‹œ์ž‘
ShowEntity
OpenUIForm
PlaySound
๋
HideEntity
CloseUIForm
StopSound (๋˜๋Š” ์žฌ์ƒ์ด ๋๋‚˜๋ฉด ์ž๋™)
๋ฌถ์Œ ๋‹จ์œ„
์—”ํ‹ฐํ‹ฐ ๊ทธ๋ฃน
UI ๊ทธ๋ฃน
์‚ฌ์šด๋“œ ๊ทธ๋ฃน
๊ทธ๋ฃน์ด ์ •ํ•˜๋Š” ๊ฒƒ
์ธ์Šคํ„ด์Šค ํ’€์˜ ํฌ๊ธฐยท์ˆ˜๋ช…
ํ™”๋ฉด ์ธต(depth), ๊ฐ€๋ฆผยท์ผ์‹œ์ •์ง€
๋™์‹œ ์žฌ์ƒ ์ˆ˜(์—์ด์ „ํŠธ ๊ฐœ์ˆ˜), ๋ณผ๋ฅจ, ์Œ์†Œ๊ฑฐ
์—์…‹ ์ง€์ •
Addressables ์ฃผ์†Œ (๋ฌธ์ž์—ด)
Addressables ์ฃผ์†Œ (๋ฌธ์ž์—ด)
Addressables ์ฃผ์†Œ (๋ฌธ์ž์—ด)
๊ฒฐ๊ณผ ํ†ต์ง€
๋น„๋™๊ธฐ โ†’ ์ด๋ฒคํŠธ
๋น„๋™๊ธฐ โ†’ ์ด๋ฒคํŠธ
๋น„๋™๊ธฐ โ†’ ์ด๋ฒคํŠธ
์‹๋ณ„์ž
ํ˜ธ์ถœ์ž๊ฐ€ ์ •ํ•œ Id
๋ฐ˜ํ™˜๋˜๋Š” serialId
๋ฐ˜ํ™˜๋˜๋Š” serialId
ToyboxNightmare ์˜ ๊ตฌ์„ฑ
๋งค๋‹ˆ์ €
๊ทธ๋ฃน
์“ฐ๋Š” ๊ณณ
Entity
Player, Enemy, Projectile, Effect, Ally
์บ๋ฆญํ„ฐยท์ ยทํˆฌ์‚ฌ์ฒดยทํ”ผ๊ฒฉ ์ดํŽ™ํŠธยท์†Œํ™˜์ˆ˜ ์ „๋ถ€
UI
Default
HUDForm, PauseMenuForm
Sound
Music(์—์ด์ „ํŠธ 1), Soundeffects(์—์ด์ „ํŠธ 8)
ํ”ผ๊ฒฉยท์‚ฌ๋ง ํšจ๊ณผ์Œ 8์ข… (Soundeffects ๊ทธ๋ฃน)
ํ•œ ์žฅ๋ฉด์œผ๋กœ ๋ณด๊ธฐ โ€” ์ ์ด ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๋•Œ๋ฆด ๋•Œ
// Entity: ํ”ผ๊ฒฉ ์ดํŽ™ํŠธ๋ฅผ ๋„์šด๋‹ค entity.ShowEntity(effectId, typeof(HitEffect), "SlimeHit", "Effect", EffectData.Create(effectId, 1, hitPosition, rotation, lifetime)); // Sound: ํ”ผ๊ฒฉ์Œ์„ ๊ทธ ์œ„์น˜์—์„œ ๋‚ธ๋‹ค sound.PlaySound("PlayerHurt", "Soundeffects", hitPosition); // UI: ์ง์ ‘ ๋ถ€๋ฅด์ง€ ์•Š๋Š”๋‹ค. ์ฒด๋ ฅ ๋ณ€ํ™” ์ด๋ฒคํŠธ๋ฅผ ๋ฐœํ–‰ํ•˜๋ฉด HUD ๊ฐ€ ๋“ฃ๊ณ  ์Šค์Šค๋กœ ๊ฐฑ์‹ ํ•œ๋‹ค events.Fire(this, PlayerHealthChangedEventArgs.Create(fromRatio, toRatio));
C#
๋ณต์‚ฌ
์„ธ ์ค„์˜ ๋ชจ์–‘์ด ๊ฑฐ์˜ ๊ฐ™๊ณ , ์–ด๋А ๊ฒƒ๋„ ํ”„๋ฆฌํŒน์ด๋‚˜ ์˜ค๋””์˜ค ํด๋ฆฝ์„ ์ง์ ‘ ์ฐธ์กฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๊ทธ๋ฃน์„ ์–ด๋–ป๊ฒŒ ๋‚˜๋ˆŒ ๊ฒƒ์ธ๊ฐ€ โ€” ํ™•์žฅํ•  ๋•Œ์˜ ๊ธฐ์ค€
โ€ข
์—”ํ‹ฐํ‹ฐ ๊ทธ๋ฃน์€ "์ˆ˜๋ช…๊ณผ ์ˆ˜๋Ÿ‰์ด ๋น„์Šทํ•œ ๊ฒƒ๋ผ๋ฆฌ". ์ดˆ๋‹น ์ˆ˜์‹ญ ๊ฐœ ๋œจ๋Š” ํˆฌ์‚ฌ์ฒด์™€ ํ•œ ํŒ์— ํ•˜๋‚˜๋ฟ์ธ ๋ณด์Šค๋ฅผ ๊ฐ™์€ ๊ทธ๋ฃน์— ๋‘๋ฉด ํ’€ ์„ค์ •์„ ์–ด๋А ํ•œ์ชฝ์— ๋งž์ถœ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
โ€ข
UI ๊ทธ๋ฃน์€ "ํ™”๋ฉด์˜ ์ธต". ๋ณดํ†ต Background / Default / Popup / System(๋กœ๋”ฉยท์˜ค๋ฅ˜) ์ •๋„๋กœ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
โ€ข
์‚ฌ์šด๋“œ ๊ทธ๋ฃน์€ "๋ณผ๋ฅจ ์Šฌ๋ผ์ด๋” ํ•˜๋‚˜". ์˜ต์…˜ ํ™”๋ฉด์— ๋ฐฐ๊ฒฝ์Œยทํšจ๊ณผ์Œยท์Œ์„ฑ ์Šฌ๋ผ์ด๋”๊ฐ€ ๋”ฐ๋กœ ์žˆ๋‹ค๋ฉด ๊ทธ๋ฃน๋„ ์…‹์ž…๋‹ˆ๋‹ค. ์—์ด์ „ํŠธ ์ˆ˜๋Š” ๊ทธ ์ข…๋ฅ˜๊ฐ€ ๋™์‹œ์— ๋ช‡ ๊ฐœ๊นŒ์ง€ ๊ฒน์ณ ๋“ค๋ ค์•ผ ํ•˜๋Š”์ง€๋กœ ์ •ํ•ฉ๋‹ˆ๋‹ค โ€” ๋ฐฐ๊ฒฝ์Œ์€ 1(ํฌ๋กœ์ŠคํŽ˜์ด๋“œํ•˜๋ ค๋ฉด 2), ํšจ๊ณผ์Œ์€ 8~16.
โš ๏ธ
๋ณธ๋ฌธ์„ ์ฝ์„ ๋•Œ ์ฃผ์˜ํ•  ์ 
โ€ข
"์˜ค๋ธŒ์ ํŠธ ํ’€๋ง"์€ Entity ์™€ UI ์—๋งŒ ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค. Sound ๋Š” ์ธ์Šคํ„ด์Šค ํ’€์ด ์•„๋‹ˆ๋ผ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด ๋‘” ์—์ด์ „ํŠธ(AudioSource) ๋ฅผ ๋Œ๋ ค ์”๋‹ˆ๋‹ค. ์—์ด์ „ํŠธ๊ฐ€ ๋ชจ๋‘ ์žฌ์ƒ ์ค‘์ด๋ฉด ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋‚ฎ์€ ์†Œ๋ฆฌ๋ฅผ ๋Š๊ณ  ์ƒˆ ์†Œ๋ฆฌ๋ฅผ ๋‚ด๊ฑฐ๋‚˜, ์ƒˆ ์†Œ๋ฆฌ๊ฐ€ ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค.
โ€ข
"UI ๊นŠ์ด ๊ด€๋ฆฌ"์—์„œ ๊ทธ๋ฃน depth ๊ฐ€ ๋ Œ๋”๋ง ์ˆœ์„œ๋ฅผ ์ •ํ•œ๋‹ค๊ณ  ์„ค๋ช…ํ•˜์ง€๋งŒ, ์ด ์—๋””์…˜์˜ ๊ธฐ๋ณธ ๊ทธ๋ฃน ํ—ฌํผ๋Š” depth ๋ฅผ ์ ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(SetDepth ๊ฐ€ ๋นˆ ๊ตฌํ˜„). ์˜ˆ์ œ๋Š” ๊ฐ ํผ Canvas ์˜ Sorting Order ๋กœ ์ˆœ์„œ๋ฅผ ์ค๋‹ˆ๋‹ค.
โ€ข
"๋น„๋™๊ธฐ ์ง„ํ–‰๋ฅ  ์ด๋ฒคํŠธ"๋Š” ์ด ์—๋””์…˜์—์„œ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์„ฑ๊ณตยท์‹คํŒจ ์ด๋ฒคํŠธ๋งŒ ์˜ต๋‹ˆ๋‹ค.
โ€ข
ํ”„๋ฆฌํŒน์— ๋กœ์ง ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ถ™์ด๋Š” ๊ทœ์น™์ด Entity ์™€ UI ์—์„œ ์ •๋ฐ˜๋Œ€์ž…๋‹ˆ๋‹ค. ์—”ํ‹ฐํ‹ฐ ํ”„๋ฆฌํŒน์—๋Š” ๋ถ™์ด์ง€ ์•Š๊ณ (๋Ÿฐํƒ€์ž„์— ๋ถ™์Œ), UI ํผ ํ”„๋ฆฌํŒน์—๋Š” ๋ฐ˜๋“œ์‹œ ๋ถ™์ž…๋‹ˆ๋‹ค.

์—”ํ‹ฐํ‹ฐ ํ”„๋ ˆ์ž„์›Œํฌ (Entity Framework)

๊ด€๋ จ ์†Œ์Šค ํŒŒ์ผ

โ€ข
GameFramework/Base/EventPool/EventPool.cs
โ€ข
GameFramework/Entity/EntityManager.EntityGroup.cs
โ€ข
GameFramework/Entity/EntityManager.EntityInfo.cs
โ€ข
GameFramework/Entity/EntityManager.cs
โ€ข
GameFramework/Entity/IEntityGroup.cs
โ€ข
GameFramework/Entity/IEntityManager.cs
โ€ข
GameFramework/Sound/SoundManager.cs
โ€ข
GameFramework/UI/IUIGroup.cs
โ€ข
GameFramework/UI/IUIManager.cs
โ€ข
GameFramework/UI/UIManager.UIGroup.cs
โ€ข
GameFramework/UI/UIManager.cs
์—”ํ‹ฐํ‹ฐ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” GameFramework์—์„œ ๋™์  ๊ฒŒ์ž„ ์˜ค๋ธŒ์ ํŠธ, UI ์š”์†Œ, ์˜ค๋””์˜ค๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์ข…ํ•ฉ์ ์ธ ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค.
์ด ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์ด๋Ÿฌํ•œ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ƒ์„ฑ, ๊ตฌ์„ฑ, ์ œ์–ดํ•˜๋Š” ํ‘œ์ค€ํ™”๋œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ œ๊ณตํ•˜๋ฉฐ, ๊ทธ๋“ค์˜ ๋ผ์ดํ”„์‚ฌ์ดํด ์ „๋ฐ˜์— ๊ฑธ์ณ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
์ด ๋ฌธ์„œ๋Š” EntityManager, UIManager, SoundManager๋ผ๋Š” ์„ธ ๊ฐ€์ง€ ์ฃผ์š” ๋งค๋‹ˆ์ €๋กœ ๊ตฌ์„ฑ๋œ ์—”ํ‹ฐํ‹ฐ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ํ•ต์‹ฌ ์•„ํ‚คํ…์ฒ˜์™€ ๊ธฐ๋Šฅ์— ์ดˆ์ ์„ ๋งž์ถฅ๋‹ˆ๋‹ค.
์ด ๋งค๋‹ˆ์ €๋“ค์ด ์˜์กดํ•˜๋Š” ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ(Resource Management) ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ ์ •๋ณด๋Š” Resource Management ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

์•„ํ‚คํ…์ฒ˜ ๊ฐœ์š” (Architecture Overview)

์—”ํ‹ฐํ‹ฐ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์„ธ ๊ฐ€์ง€ ์ฃผ์š” ํ•˜์œ„ ์‹œ์Šคํ…œ(Entity, UI, Sound)์—์„œ ์ผ๊ด€๋œ ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.
๊ฐ ํ•˜์œ„ ์‹œ์Šคํ…œ์€ ์ค‘์•™ ์ง‘์ค‘์‹ ๋งค๋‹ˆ์ €๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ์ด ๋งค๋‹ˆ์ €๋Š” ์š”์†Œ๋ฅผ ๋…ผ๋ฆฌ์  ๊ทธ๋ฃน์œผ๋กœ ์กฐ์งํ•˜๊ณ , ๋ฆฌ์†Œ์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉฐ, ๋ผ์ดํ”„์‚ฌ์ดํด ์ด๋ฒคํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๊ณตํ†ต ์„ค๊ณ„ ํŒจํ„ด (Common Design Pattern)

์—”ํ‹ฐํ‹ฐ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์„ธ ๋งค๋‹ˆ์ €๋Š” ๊ณตํ†ต์ ์œผ๋กœ ๋‹ค์Œ ์„ค๊ณ„ ์›์น™์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.
โ€ข
๊ทธ๋ฃน ๊ธฐ๋ฐ˜ ์กฐ์ง: ์š”์†Œ๋“ค์€ ๊ด€๋ฆฌ ํšจ์œจ์„ฑ์„ ์œ„ํ•ด ์ด๋ฆ„์ด ์žˆ๋Š” ๊ทธ๋ฃน์œผ๋กœ ์กฐ์ง๋ฉ๋‹ˆ๋‹ค.
โ€ข
๋ฆฌ์†Œ์Šค ๊ธฐ๋ฐ˜ ์ธ์Šคํ„ด์Šคํ™”: ์š”์†Œ๋“ค์€ ResourceManager๋ฅผ ํ†ตํ•ด ์• ์…‹์—์„œ ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค.
โ€ข
์˜ค๋ธŒ์ ํŠธ ํ’€๋ง(Object Pooling): ํšจ์œจ์ ์ธ ๊ฐ์ฒด ์žฌ์‚ฌ์šฉ์„ ์œ„ํ•ด ์˜ค๋ธŒ์ ํŠธ ํ’€์„ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.
โ€ข
์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ํ†ต์‹ : ์ƒํƒœ ๋ณ€๊ฒฝ์— ๋Œ€ํ•œ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์•Œ๋ฆผ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
โ€ข
ํ—ฌํผ ์ธํ„ฐํŽ˜์ด์Šค ํŒจํ„ด: ํ”Œ๋žซํผ๋ณ„ ๊ตฌํ˜„์€ ํ—ฌํผ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์ง€์›๋ฉ๋‹ˆ๋‹ค.

์—”ํ‹ฐํ‹ฐ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ (Entity Management System)

์—”ํ‹ฐํ‹ฐ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์€ ๊ฒŒ์ž„ ์„ธ๊ณ„์˜ ๊ฒŒ์ž„ ์˜ค๋ธŒ์ ํŠธ(Entity)๋ฅผ ์ƒ์„ฑ, ์กฐ์ง, ์ œ์–ดํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
์—”ํ‹ฐํ‹ฐ(Entity)๋Š” ์บ๋ฆญํ„ฐ, ์†Œํ’ˆ, ์ดํŽ™ํŠธ, ์ƒํ˜ธ์ž‘์šฉ ๊ฐ€๋Šฅํ•œ ์š”์†Œ ๋“ฑ ๊ฒŒ์ž„ ํ™˜๊ฒฝ์— ์กด์žฌํ•˜๋Š” ๋ชจ๋“  ๊ฐ์ฒด๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์—”ํ‹ฐํ‹ฐ ์•„ํ‚คํ…์ฒ˜ (Entity Architecture)

์—”ํ‹ฐํ‹ฐ ๊ทธ๋ฃน(Entity Group)

โ€ข
์—”ํ‹ฐํ‹ฐ๋Š” ์ด๋ฆ„์ด ์žˆ๋Š” ๊ทธ๋ฃน์œผ๋กœ ์กฐ์ง๋ฉ๋‹ˆ๋‹ค.
โ€ข
๊ฐ ๊ทธ๋ฃน์€ ๋‹ค์Œ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค:
โ—ฆ
์ž์ฒด ์˜ค๋ธŒ์ ํŠธ ํ’€์„ ์œ ์ง€
โ—ฆ
์ž๋™ ํ•ด์ œ ๊ฐ„๊ฒฉ, ์šฉ๋Ÿ‰, ๋งŒ๋ฃŒ ์‹œ๊ฐ„ ์„ค์ •
โ—ฆ
๊ทธ๋ฃน ๋‚ด ์—”ํ‹ฐํ‹ฐ ์ถ”์  ๋ฐ ๊ด€๋ฆฌ

์—”ํ‹ฐํ‹ฐ ๋ผ์ดํ”„์‚ฌ์ดํด (Entity Lifecycle)

1.
์ƒ์„ฑ: ShowEntity ํ˜ธ์ถœ (์—”ํ‹ฐํ‹ฐ ID, ์• ์…‹ ์ด๋ฆ„, ๊ทธ๋ฃน ์ด๋ฆ„ ์ง€์ •)
2.
๋กœ๋”ฉ: ResourceManager๋ฅผ ํ†ตํ•ด ๋ฆฌ์†Œ์Šค ๋กœ๋“œ
3.
์ดˆ๊ธฐํ™”: ์—”ํ‹ฐํ‹ฐ ์ดˆ๊ธฐํ™” ํ›„ ๊ทธ๋ฃน์— ์ถ”๊ฐ€
4.
์—…๋ฐ์ดํŠธ: ๋งค ํ”„๋ ˆ์ž„ ์—…๋ฐ์ดํŠธ ํ˜ธ์ถœ
5.
๋ถ€์ฐฉ(์˜ต์…˜): ๋ถ€๋ชจ ์—”ํ‹ฐํ‹ฐ์— ๋ถ€์ฐฉ ๊ฐ€๋Šฅ
6.
์ˆจ๊น€: HideEntity ํ˜ธ์ถœ
7.
์žฌํ™œ์šฉ: ์—”ํ‹ฐํ‹ฐ ์ธ์Šคํ„ด์Šค๋ฅผ ์˜ค๋ธŒ์ ํŠธ ํ’€๋กœ ๋ฐ˜ํ™˜

๋ถ€๋ชจ-์ž์‹ ๊ด€๊ณ„ (Parent-Child Relationship)

โ€ข
์—”ํ‹ฐํ‹ฐ ๊ฐ„ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ์ง€์›
โ—ฆ
๋ถ€๋ชจ ์—”ํ‹ฐํ‹ฐ์— ๋ถ€์ฐฉ(Attach)
โ—ฆ
๋ถ€๋ชจ๋กœ๋ถ€ํ„ฐ ๋ถ„๋ฆฌ(Detach)
โ—ฆ
๊ณ„์ธต ํƒ์ƒ‰ ๊ฐ€๋Šฅ
โ€ข
๋ณตํ•ฉ ๊ฐ์ฒด, ์บ๋ฆญํ„ฐ ๋ถ€์ฐฉ๋ฌผ ๋“ฑ ๋ณต์žกํ•œ ๊ตฌ์กฐ ๊ตฌํ˜„ ๊ฐ€๋Šฅ

UI ๊ด€๋ฆฌ ์‹œ์Šคํ…œ (UI Management System)

UI ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์€ UI ์š”์†Œ๋ฅผ ์ƒ์„ฑ, ํ‘œ์‹œ, ์ œ์–ดํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
UI Form ๋กœ๋”ฉ, ํ‘œ์‹œ, ์ƒํ˜ธ์ž‘์šฉ ๋“ฑ์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

UI ์•„ํ‚คํ…์ฒ˜ (UI Architecture)

UI ๊ทธ๋ฃน(UI Group)

โ€ข
UI Form์€ ๊ทธ๋ฃน์œผ๋กœ ์กฐ์ง๋˜๋ฉฐ, ๊ทธ๋ฃน์€ ๋‹ค์Œ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค:
โ—ฆ
๋ Œ๋”๋ง ์ˆœ์„œ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊นŠ์ด(Depth) ๊ฐ’ ์„ค์ •
โ—ฆ
UI Form ์Šคํƒ ์œ ์ง€
โ—ฆ
ํ™œ์„ฑ/์ผ์‹œ์ •์ง€/๊ฐ€๋ฆผ ์ƒํƒœ ์ œ์–ด
โ—ฆ
๋™์ผ ๊ทธ๋ฃน ๋‚ด ํฌ์ปค์Šค ๊ด€๋ฆฌ

UI Form ๋ผ์ดํ”„์‚ฌ์ดํด (UI Form Lifecycle)

1.
์—ด๊ธฐ: OpenUIForm ํ˜ธ์ถœ (์• ์…‹ ์ด๋ฆ„, ๊ทธ๋ฃน ์ด๋ฆ„)
2.
๋กœ๋”ฉ: ResourceManager๋ฅผ ํ†ตํ•œ ๋ฆฌ์†Œ์Šค ๋กœ๋“œ
3.
์ธ์Šคํ„ด์Šคํ™”: ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ๋˜๋Š” ํ’€์—์„œ ์žฌ์‚ฌ์šฉ
4.
ํ™œ์„ฑํ™”: ๊ทธ๋ฃน์—์„œ ํ™œ์„ฑ ์ƒํƒœ ์ „ํ™˜
5.
ํฌ์ปค์Šค ๊ด€๋ฆฌ: ํฌ์ปค์Šค, ๊ฐ€๋ฆผ, ์ผ์‹œ์ •์ง€ ์ฒ˜๋ฆฌ
6.
๋‹ซ๊ธฐ: CloseUIForm ํ˜ธ์ถœ
7.
์žฌํ™œ์šฉ: ์ธ์Šคํ„ด์Šค ์˜ค๋ธŒ์ ํŠธ ํ’€ ๋ฐ˜ํ™˜

UI ๊นŠ์ด(Depth) ๊ด€๋ฆฌ

โ€ข
๊ทธ๋ฃน ๊นŠ์ด ๊ฐ’์— ๋”ฐ๋ผ ๊ทธ๋ฃน ์ „์ฒด์˜ ๋ Œ๋”๋ง ์ˆœ์„œ ๊ฒฐ์ •
โ€ข
๊ทธ๋ฃน ๋‚ด์—์„œ๋Š” ์˜คํ”ˆ ์ˆœ์„œ๋Œ€๋กœ UI Form ์Šคํƒ ๊ตฌ์„ฑ
โ€ข
Refocus๋กœ ํŠน์ • Form์„ ๋งจ ์œ„๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Œ
โ€ข
๊ฐ€๋ ค์ง„ Form์„ ์ผ์‹œ์ •์ง€ํ•˜์—ฌ ์„ฑ๋Šฅ ์ตœ์ ํ™”

์‚ฌ์šด๋“œ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ (Sound Management System)

์‚ฌ์šด๋“œ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์€ ๊ฒŒ์ž„ ๋‚ด ์˜ค๋””์˜ค ๋กœ๋“œ, ์žฌ์ƒ, ์ œ์–ด๋ฅผ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šด๋“œ ์•„ํ‚คํ…์ฒ˜ (Sound Architecture)

์‚ฌ์šด๋“œ ๊ทธ๋ฃน(Sound Group)

โ€ข
๊ทธ๋ฃน ๋‹จ์œ„๋กœ ๋ณผ๋ฅจ, ์Œ์†Œ๊ฑฐ, ์šฐ์„ ์ˆœ์œ„ ์ œ์–ด
โ€ข
๋™์‹œ ์žฌ์ƒ์„ ์œ„ํ•œ ๋‹ค์ˆ˜์˜ ์‚ฌ์šด๋“œ ์—์ด์ „ํŠธ ๋ณด์œ 
โ€ข
์‚ฌ์šด๋“œ ๊ต์ฒด ์ •์ฑ… ์„ค์ •
โ€ข
์Œ์•…, ํšจ๊ณผ์Œ, ํ™˜๊ฒฝ์Œ ๋“ฑ ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ๊ด€๋ฆฌ

์‚ฌ์šด๋“œ ๋ผ์ดํ”„์‚ฌ์ดํด (Sound Lifecycle)

1.
์žฌ์ƒ: PlaySound ํ˜ธ์ถœ (์• ์…‹ ์ด๋ฆ„, ๊ทธ๋ฃน ์ด๋ฆ„)
2.
๋กœ๋”ฉ: ResourceManager๋ฅผ ํ†ตํ•œ ๋กœ๋“œ
3.
์—์ด์ „ํŠธ ํ• ๋‹น: ์ง€์ • ๊ทธ๋ฃน์˜ ์‚ฌ์šด๋“œ ์—์ด์ „ํŠธ๊ฐ€ ์žฌ์ƒ
4.
์ œ์–ด: ์ผ์‹œ์ •์ง€, ์žฌ๊ฐœ, ์ •์ง€ ๊ฐ€๋Šฅ
5.
ํ•ด์ œ: ์‚ฌ์šฉ์ด ๋๋‚œ ์‚ฌ์šด๋“œ ๋ฆฌ์†Œ์Šค ํ•ด์ œ

๋‹ค๋ฅธ ์‹œ์Šคํ…œ๊ณผ์˜ ํ†ตํ•ฉ (Integration with Other Systems)

โ€ข
๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ์™€์˜ ํ†ตํ•ฉ
โ—ฆ
EntityManager โ†’ ์—”ํ‹ฐํ‹ฐ ํ”„๋ฆฌํŒน ๋กœ๋“œ
โ—ฆ
UIManager โ†’ UI Form ํ”„๋ฆฌํŒน ๋กœ๋“œ
โ—ฆ
SoundManager โ†’ ์˜ค๋””์˜ค ์• ์…‹ ๋กœ๋“œ
โ—ฆ
๋น„๋™๊ธฐ ๋กœ๋”ฉ, ์˜์กด์„ฑ ๊ด€๋ฆฌ, ๋ฆฌ์†Œ์Šค ์—…๋ฐ์ดํŠธ ์ง€์›
โ€ข
์˜ค๋ธŒ์ ํŠธ ํ’€๊ณผ์˜ ํ†ตํ•ฉ
โ—ฆ
EntityManager, UIManager โ†’ ์ธ์Šคํ„ด์Šค ํ’€๋ง ์žฌ์‚ฌ์šฉ
โ—ฆ
์„ฑ๋Šฅ ํ–ฅ์ƒ, GC ๋ถ€๋‹ด ๊ฐ์†Œ
โ€ข
์ด๋ฒคํŠธ ์‹œ์Šคํ…œ๊ณผ์˜ ํ†ตํ•ฉ
โ€ข
๋กœ๋”ฉ ์„ฑ๊ณต/์‹คํŒจ ์ด๋ฒคํŠธ
โ€ข
๋ผ์ดํ”„์‚ฌ์ดํด ์ƒํƒœ ๋ณ€๊ฒฝ ์ด๋ฒคํŠธ
โ€ข
๋น„๋™๊ธฐ ์ง„ํ–‰๋ฅ  ์ด๋ฒคํŠธ
โ€ข
๋А์Šจํ•œ ๊ฒฐํ•ฉ(Loose Coupling) ๊ตฌํ˜„

์š”์•ฝ (Summary)

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