์์๊ณผ ์ปดํฌ์ง์ . ๋ฌด์์ ์ ํํ ์ง ์ด๋ป๊ฒ ํ๋จํด์ผ ํ๋๊ฐ?
OO์์ ์ฌ์ฌ์ฉ์ฑ์ ์ค์์ํ๋ ์ด์
Donโt reinvent the wheel!
- ๋ฐํด๋ ์ด๋ฏธ ๋์๊ณผ ์ํ๊ฐ ๋ช
ํํ ๋ฌผ์ฒด
- ์ค๊ณ, ๊ตฌํ, ํ ์คํ ๊น์ง ๋ชจ๋ ๋ง์น ๋ฌผ์ฒด
- ์ด๊ฑธ ๊ฐ์ง๊ณ ๋ค๋ฅธ ์ ์ฉํ ๋ฌผ์ฒด๋ฅผ ๋ง๋ค์.
- ์๊ฐ ๋ญ๋นํ์ง ๋ง์
- ์๋์ฐจ, ์์ ๊ฑฐ
ํด๋์ค๋ฅผ ์ฌ์ฌ์ฉํ๋ฉด ์ข์ ์
์ค๊ณ์ ์ฝ๋ฉ์ ๋๋ ์๊ฐ์ ์ ์ฝ
- OO์ธ์ ํ๋ก๊ทธ๋๋ฐ์๋ ์ ์ฉ๋๋ ์ฌ๋ฐ๋ฅธ ์์น
- ํ์ง๋ง ์ค์ ์์ 100% ์ ์ฉ ๋ถ๊ฐ
- ํ๋ก๊ทธ๋จ์ด ๋ฏธ๋์ ์ด๋ป๊ฒ ๋ณํ ์ง ์์ ํ ์์ธก ๋ถ๊ฐ
- ์ฌ์ฌ์ฉ์ฑ์ ๋์ด ๋ฉ์ด ์๋ชป๋ ๋ฐํด๋ฅผ ์ฅ์ฐฉ ์ํฌ ์ ์์
- ์์์๋์ ์ฌ์ฉํ๋ ๋๋ฉ์ด ๋ฐํด๋ฅผ ์๋์ฐจ์ ์ฌ์ฉ
- ์ง๊ธ ๊ตณ์ด ์ฌ์ฉ์ํ๋๋ฐ ์ฌ์ฌ์ฉ ์๊ฐํ๊ณ ๊ฐ๋ ์ฑ ๋จ์ดํธ๋ฆฌ๋ ์ฝ๋๋ฅผ ์์ฐํ ์๋ ์์
- ์ฆ, ์ฃผ๊ด์ ์, ์์์ ๋ฌธ์ ์
ํ ์คํธ์ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์ ์ฝ
- ์ด๋ฏธ ํ ์คํธ๊น์ง ๋๋ธ ํด๋์ค๋ฅผ ๋ค์ ํ ์คํธํ ํ์๊ฐ ์์
- ์์์ ๋ถ๋ชจ ํด๋์ค๋ ์ด๋ฏธ ํ ์คํธ๊ฐ ๋๋ ์ํฉ
- ๋ถ๋ชจ ํด๋์ค๋ ํ ์คํธ ํ ํ์๊ฐ ์๋ค๊ณ ์ฃผ์ฅ๋ ํ๋ ํธ
- ํ์ง๋ง ์ค์ ๋ก๋ ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ๊ฐ ๋น๋ฒ
- ์๋ก์ด ๋ฐฉ๋ฒ์ผ๋ก ๋ถ๋ชจ ํด๋์ค๋ฅผ ์ฌ์ฉํ ์๋ ์์
- ๋ถ๋ชจ ํด๋์ค๋ฅผ ๋ณ๊ฒฝํ ์๋ ์์
๊ด๋ฆฌ ๋น์ฉ์ ์ ์ฝ
- ์ฝ๋ ์ค๋ณต์ด ์์
- ํ ๊ณณ๋ง ๊ณ ์น๊ณ ๋ค๋ฅธ ๊ณณ์ ์ค์๋ก ์ ๊ณ ์น ๊ฐ๋ฅ์ฑ์ด ์์
- ๊ด๋ จ๋ ์ฝ๋๊ฐ ๋ชจ๋ ํ ํ์ผ์ ์์
- ํด๋น ํ์ผ์ ์ด๋ฉด ๋ชจ๋ ๋ก์ง ๋ฐ ๋ฐ์ดํฐ ํ์ ๊ฐ๋ฅ
- ๋ค๋ง, ์ฌ์ฌ์ฉ์ฑ์ ์ํด ํด๋์ค๋ฅผ ์๊ฒ ๋๋๋ค๋ณด๋ฉด ํ์ผ ์๊ฐ ๋ง์์ง
OO ๋ชจ๋ธ๋ง์ ๋ง์ ์ฐ์ต์ด ํ์
- Best practice๋ก ์ปค๋ฒ ๋ถ๊ฐ
- ์ฃผ๊ด์ ์ด๊ธฐ ๋๋ฌธ
- ๋๋ฌด๋ ๋ค์ํ ํ๋ก๊ทธ๋จ์ด ์๊ธฐ ๋๋ฌธ
- ์ฆ, ๋ค์ํ ๋ฌธ์ ํ์ ์ ๋ฐ๋ผ ๋ง๋ ํด๊ฒฐ์ฑ ์ ๋ค๋ฆ
- ์ง๋ฆ๊ธธ์ ์๋ค.
- ๋จ๋ค๋ณด๋ค ๋ง์ด ํด๋ณด๊ณ , ๋ง์ด ๊ณ ๋ฏผํด๋ณด๋ฉด ๋น ๋ฅด๊ฒ ๋ ์ ์๋ค.
- ๋์
- ๋ค๋ฅธ ์ฌ๋์ ์ฝ๋ ์ฌ์ฉ
- ๋ค๋ง, ๋ณด๊ณ ์๋ค๊ณ ์ฐฉ๊ฐํ์ง๋ ๋ง๋ผ.
- ๊ด์ฐฎ์ ํ๋ ์์ํฌ
- ์ฝ๋ ๋ฆฌ๋ทฐ
- ๋ค๋ฅธ ์ฌ๋์ ์ฝ๋ ์ฌ์ฉ
์์ vs ์ปดํฌ์ง์
- ๋ ๋ค ์ฌ์ฌ์ฉ์ฑ์ด ๋ชฉ์
- ๋ ์ค ํ๋๋ฅผ ๊ณ ๋ฅธ ์์น์ด ํ์
์ฑ๋ฅ์ ์ธก๋ฉด
- ๋ฉ๋ชจ๋ฆฌ ๋ฌธ์ : ์์์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ณด๋ค ์ข๋ค.
- ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ฉด, ๋ฉ๋ชจ๋ฆฌ์ ํ๋์ ๋ฉ์ด๋ฆฌ๋ก ๋ค์ด๊ฐ๊ฒ ๋จ
- ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ด๋ค ๋ฐฉ์์ ์ฌ์ฉํ๋๋์ ๋ฐ๋ผ ๋ฉ๋ชจ๋ฆฌ์ ๋ค์ด๊ฐ๋ ๋ฐฉ์์ด ๋ณํ๊ฒ ๋๋ค.
Rectangle
์ ๊ฒฝ์ฐ ๊ฐ๋ก ์ธ๋ก๋ฅผ ํํํ๊ณ ,Box
๋ ๊น์ด๊น์ง ํํํ๋ ์ฝ๋๋ฅผ ์ง ๋ค๊ณ ์๊ฐํด๋ณด์.
- ์์๊ฐ์ ๊ฒฝ์ฐ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ง๋ค๋ฉด(
new
), ๋ด๋ถ์์ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ง ์๊ณ ํ ๋ฉ์ด๋ฆฌ๋ก ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ํ๋ค. - ๊ทธ์ ๋ฐ๋๋ก ์ปดํฌ์ง์ ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ฌ๋ฌ ๋ฉ์ด๋ฆฌ๋ก ์์ฑ์ด ๋ ์ ์๋ค.
- ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์์ฑํด์ ๋๊ฒจ์ฃผ์ด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค. ์ฐธ์กฐํ ์ฃผ์๋ง์ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์, ๊ฒฐ๊ตญ์ ๋ค๋ฅธ ๊ณณ์ ๋ฉ๋ชจ๋ฆฌ ๋ฉ์ด๋ฆฌ๊ฐ ์์ฑ๋๋ค.
- ์ฆ, ์ฌ๊ธฐ์ ์ ์ ์๋ ์ ์ ์์๊ณผ ์ปดํฌ์ง์ ์์ ๋ฉ๋ชจ๋ฆฌ ์์ ์ฐจ์ด๊ฐ ๋ฐ์ํ๋ค๋ ๊ฒ์ด๋ค.
- ๊ทธ๋ฆฌ๊ณ ์ด๋ ์คํ ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น๋ค.
- ๊ทธ๋ ๊ธฐ์ ์ฑ๋ฅ์ ์ฃผ์์ ํ๋ ์์ ์ ๊ฒฝ์ฐ์๋ ๊ณ ๋ คํด์ผํ๋ ๋์์ผ๋ก ๋ณ๋ชจํ๋ค.
์ฒซ๋ฒ์งธ ๋ณ๋ชฉ์ (์บ์ ์ต์ ํ)
CPU์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ด์ ๋ฐ์ดํฐ ์ ์ก
- ๋ฉ๋ชจ๋ฆฌ โ ๋ฒ์ค(CPU์ชฝ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ด๋ํด์ฃผ๋ ๋ ์) โ CPU
- ์ฌ๊ธฐ์ CPU ์ฒ๋ฆฌ ์๋, ๋ฐ์ดํฐ ์ด๋ ์๋๊ฐ ๋ค๋ฅด๊ฒ ๋์ด ๋ณ๋ชฉ์ด ์๊ธด๋ค.
- ์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ์ ์บ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์๋ ๊ฒ.
- ๋งจ๋ ๊ณ์ฐํ๊ณ ํ์ํ ๋๋ง๋ค ๋ฉ๋ชจ๋ฆฌํํ ์์ฒญ, ๋ฒ์คํ๊ณ ์ด๋, ์ฐ์ฐ ์ด๋ ๊ฒ ํ๋ค๋ณด๋ฉด ๋๋ฌด ์ค๋๊ฑธ๋ฆฌ๋,
- ์ด์ฐจํผ 4kb ๊ณ์ฐ์ํด ์ฝ์ด์ฌ ๊ฑฐ๋ฉด ํ๋ฒ์ ์ฝ์ด์ค๊ณ , ์บ์์ชฝ์ ์ ์ฅํด๋๋๊ฒ ๋ ๋น ๋ฅด๋ค๋ ๊ฒ
- ์ด๋ฐ ๊ฑธ CPU ์ต์ ํ๋ผ๊ณ ํ๋ค. ์์ฆ์ ์บ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๊ณ์ ์ฆ๊ฐํ๋ ์ถ์ธ. CPU ์ฑ๋ฅ์ ์ํฅ์ ๋ง์ด ์ค๋ค๋ ๋ฐ์ฆ์ด๊ฒ ์ง?
- ์ด๋ฌํ ์ ์์ ์์ ๋ชจ๋ธ๋ก ๋ง๋ ๊ฐ์ฒด๋ ํ๋ฒ์ ์บ์ ๋ฉ๋ชจ๋ฆฌ์ ๋ค์ด๊ฐ ๊ฐ๋ฅ์ฑ์ด ๋๋ค.
- ์ปดํฌ์ง์ ๋ชจ๋ธ๋ก ๋ง๋ ๊ฐ์ฒด์ ๊ฒฝ์ฐ ๊ฐ์ฒด ๋ด ๋ถํ ์๋งํผ ์บ์ ๋ฉ๋ชจ๋ฆฌ๋ก ๋ก๋ฉํ ๊ฐ๋ฅ์ฑ์ด ๋๋ค.
๋๋ฒ์งธ ๋ณ๋ชฉ์ (๋ฉ๋ชจ๋ฆฌ ํ ๋น/ํด์ )
- ๋ฉ๋ชจ๋ฆฌ ํ ๋น(
new
)๊ณผ ํด์ (delete
,release
) - ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋ฐ๋ผ ๋ ์ค ํนํ ๋๋ฆฐ ๊ฒ์ด โ๋ฐ๋์โ ์๋ค. (์ด๋ถ๋ถ ํ์ธ ํ์)
- ์์์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น๊ณผ ํด์ฒด๊ฐ ๋ฑ ํ๋ฒ์ฉ ์๊ธด๋ค.
- ์ปดํฌ์ง์ ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฐ๊นฅ์ชฝ ๋ง๋ค๋ ํ๋ฒ, ๋ถํ ์๋งํผ์ฉ ์ถ๊ฐ๋ก ํ์ํ๋ค.
๋คํ์ฑ
- ๋คํ์ฑ์ ์ฌ์ฉํ์ฌ ๋ชจ๋ ํ์ ๊ฐ์ฒด์ ๋์์ ๋ช ๋ น์ ๋ด๋ฆฌ๊ณ ์ถ์ ๊ฒฝ์ฐ: ์์ ์ฌ์ฉ
์ ์ง๋ณด์
- ๊ด๋ฆฌ์ ํจ์จ์ฑ์ ์ํด ํน์ ๋ฐฉ์์ผ๋ก ๊ฐ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.
์์์ด ๋์ ๊ฒฝ์ฐ
- ์ปดํฌ์ง์ ์ผ๋ก ๊ฐ๊ฒ ๋์์ ๋, ์คํ๋ ค ์ฝ๋๊ฐ ๋ง์ด ๋ฐ์ํ๋ ๊ฒฝ์ฐ
- ๊ฒฐ๊ตญ ์กฐ๋ฆฝํด์ ์ฌ์ฉํ๋ ๊ฐ์ฒด์์ ๋ถํ์ ๋ฉ์๋๋ฅผ ํธ์ถํด์ ๊ฐ์ ๊ฐ์ ธ์์ผ ํ๋ค๋ฉด, ํ์์๋ signature๋ฅผ ๋ง๋ค์ด์ ์ฒ๋ฆฌํด์ผ ํ๋ค.
- ๋ฆด๋ ์ด ํจ์ (ํ์์์ ๊ฐ๋ง ๊ฐ์ ธ์์ ๋๊ฒจ์ฃผ๋)๊ฐ ์๊ธฐ๊ฒ ๋๋ค.
์ปดํฌ์ง์ ์ด ๋์ ๊ฒฝ์ฐ
- ๊น์ ์์๊ด๊ณ
- ์ค๊ฐ์ ํด๋์ค๋ฅผ ๋ฐ๊พธ๋ฉด ์๋ ํด๋์ค๋ ๋ชจ๋ ๋ฐ๋๋ค.
- ์์ ํด๋์ค์์ ๋ฌธ์ ์๋์ง ๋ชจ๋ ํ์ธํด์ผ ํ๋ค.
- ์ปดํฌ์ง์ ๋ ๋น์ทํ ๋ฌธ์ ๊ฐ ์๊ธด ํ๋, ์กฐ๋ฆฝ์ ์ธก๋ฉด์ด ๋ ๊ฐํ๊ธฐ ๋๋ฌธ์ ๋ํ๋ค.
๊ทธ์ธ ์ผ๋ฐ์ ์ธ ์ํฉ
- ์์์ ์ผ๋ก ์๊ฐํ ๊ฒ
- ์ด ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ ์ดํด๊ด๊ณ์๋ค ๊ฐ์ ๊ณตํต๋ ํฉ์๋ฅผ ์๊ฐํ์.
- has-a: ์ปดํฌ์ง์ - ๊ฐ๋ ์ด ๋ถ๋ฆฌ๋๋ ๊ฒ์ด ๋ง๋ค๋ฉด
- is-a: ์์ - ๊ฐ๋ ์ด ํฌํจ๋๋ ๊ฒ์ด ๋ง๋ค๋ฉด
Entity Component System(ECS)
- ์ปดํฌ์ง์ ์ ์ ํธํ๋ ๋ ๋ค๋ฅธ ์
- ์ฝ๋ ๋ณ๊ฒฝ ์์ด ์์ ๋กญ๊ฒ ๊ฐ์ฒด๋ฅผ ๋ง๋ค ์ ์๋๋ก ํ๋ ๊ฒ์ด ๋ชฉ์
- ์ํคํ ์ณ ํจํด ์ค ํ๋๋ค.
- ๊ฒ์ ์ ๊ฒ์์ ๋ง์ด ์ฌ์ฉํ๋ค. (Unity3D)
- ๊ฒ์์์ ๊ฐ์ฒด ์ค๊ณ๋ฅผ ํ๋ ค๋ฉด ๊น์ ์์์ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
- GameObject โ PhysicsObject โ Character โ Playerโฆ
- ๊ทธ๋ฐ๋ฐ ๊ทธ๋ฌ๋ค ๋ณด๋ ๊ธฐํ์์ ๋ณ๊ฒฝ์ด ๋ค์ด์์ ๋, ์ด๋ฅผ ๋ฐ๊พธ๋๊ฒ ์๋นํ ๊ท์ฐฎ์ ์์ ์ด ๋ ์ ์๋ค.
- ๊ฐ๋ฐ์: ์ ๊ธฐํ์์ ์ด์ฐฝ๊ธฐ์ ํ์ธ์ ์ํ์ง?
- ๊ธฐํ์: ์ํด๋ณด๊ณ ์ด๋ป๊ฒ ํ๋จ?
- ์ ๋ฌด ํจ์จ์ฑ์ด ๋งค์ฐ ๋จ์ด์ง.
๋ฌธ์ : ์ฌ์ปดํ์ผ ์์ด ๊ธฐํ์๊ฐ ์ํ๋ ๋๋ก ๊ฐ์ฒด๋ฅผ ์กฐ๋ฆฝํ ์ ์์๊น?
- Entitiy Component System
GameObject
๋Component
๋ฅผ List๋ก ๋ค๊ณ ์๋ค.- ๊ฐ๊ฐ์
update()
ํ๋ ๋ฐฉ๋ฒ์ overrideํ์ฌ ์ํฉ์ ๋ง๊ฒ ๊ตฌํํ๋ค. - ์ฌ๊ธฐ์ ์๊ฐํด์ผ ํ ๊ฒ์,
NPC
,Player
,Effect
์ ๊ฐ์ ํด๋์ค๊ฐ ์ฌ๋ผ์ก๋ค๋ ๊ฒ์ด๋ค.- ๋ณด๋ค ์ผ๋ฐํ๋ ๊ฐ๋ ์ผ๋ก ์๋ฆฌ์ก์๋๊ณ ์ฒ๋ฆฌํ๊ณ ์์
- ์ด Component๋ฅผ ์กฐ๋ฆฝํ ๊ฒฐ๊ณผ๋ก, NPC, Player์ ๊ฐ์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค ์ ์์