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 ๊น์ด ๋ฐ ํฌ์ปค์ค ๊ด๋ฆฌ
โข
์ฌ์ด๋ ๋ณผ๋ฅจ ๋ฐ ์ฐ์ ์์ ์ ์ด

















