๊ฑด๋ฐฉ์ง ๋งํฌ๋ก ๊ธ์ ์ผ์ผ๋ ์๊พธ ๊ธ ๋ด์ฉ์ด ์งค๋ ค์,
์๋ฌด๋๋ ๊ฒธ์ํ๋ผ๋ ๋ป์ธ๊ฒ ๊ฐ์ ๊ฐ๋ตํ๊ฒ ์์ ๋ง.
ECS ๋ OOP์ ๊ฐ๋ฐ ์์น๊ณผ ๋์์ธํจํด์ ์ฌ์ฉํ๋ ์์คํ ์ค๊ณ๊ตฌ์กฐ ์ ๋๋ค.
์ ๋ฐ๋๊ฐ ๋ ์ ์์ง์.
์์ธํ ๊ฑด ์๋ ๋งํฌ.
Erich Gamma ์ธํฐ๋ทฐ
https://www.artima.com/lejava/articles/designprinciplesP.html
ECS
https://en.wikipedia.org/wiki/Entity_component_system
๋์์ธํจํด(๋์) ์ํค
์ ๋ํฐ ecs๋ pure๋ hybrid๋ ์์ pure๋ oop์์ด ์๋๋ผ ์ ํ ๋ค๋ฅธ dod ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋ฐํ๋๊ฑฐ๊ณ hybrid๋ ์ง์ ์ฅ๋ฒฝ์ ๋ฎ์ถ๊ธฐ ์ํด ์์ ๊ฒ ์ ๋ฐ๋๊ฐ ๋ ์ ์์ง์ ์ด๋ด ์๋ฆฌํ์ง๋ง๊ณ ๊ฒธ์ํ๊ฒ ์ด์๋ผ
ํน์ ํ์ด๋ธ๋ฆฌ๋๊ฐ oop๋ ์์๊ฑฐ๋ผ๊ณ ์๊ฐํ๋๊ฑฐ๋..?
hybrid๋ ๊ธฐ์กด์ ์ปดํฌ๋ํธ๋ ์์๊ฑฐ๊ณ ๊ธฐ์กด์ oop ์ ์ธ ๊ฐ๋ ์ ๊ทธ๋๋ก ํ์ฉํ ์ ์๋๋ฐฉ๋ฉด pure ๋ฐฉ์์ ๊ทธ๋ฐ ๋ฐฉ์์ผ๋ก๋ ํ๋ฆ ์ข ์ดํด๊ฐ ๋๋?
๊ธฐ์กด๊ฒ์ ํ์ฉํ๋ค๋๊ฑด ๋ชจ๋ ธ๋นํค์ด๋น์ด ์์คํ ์ผ ๋ฟ์ด๊ณ oop๋ ecs๋ ์๋ก ๋ฐ๋๊ด๊ณ๊ฐ ์๋๋ผ๊ณ ์๋ฌด๋ฆฌ ํด๋ ๋ฃ์ง๋ฅผ ์์ผ๋..
dod๊ฐ ๋ญ์ง๋ ์์?
๋๊ฐ dod๊ฐ ๋ญ์ง๋ฅผ ์ดํดํ์ผ๋ฉด ๊ทธ๋ฐ ๋๊ธ ๋ชป๋ฌ์์ํ ๋ฐ
๋ฐ๋์ ๋ํ ๊ธฐ์ค์ ์ด๋ป๊ฒ ์ธ์ฐ๋์ ๋ฐ๋ผ ๋ค๋ฅผ ์ ์์ง ์๋ฅผ ๋ค์ด oop(์ ์ฐจ์งํฅ์ ํ๋ก๊ทธ๋๋ฐ์ ํ์ฅ) vs ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ผ๋ก ๊ตฌ๋ถํ ์๋ ์๊ณ oop vs dod๋ก ๊ตฌ๋ถํ ์๋ ์๋๊ฑฐ์ผ ๊ทธ๋ฆฌ๊ณ pure ecs๋ dod ๊ฐ๋ ์ ์ด์ฉํ ๋ฐฉ๋ฒ์ด์ผ
๋ด๊ฐ ๋ณด๊ธฐ์ dod ๊ฐ๋ ์์ฒด๋ฅผ ์ ๋ชจ๋ฅด๋ ๊ฒ ๊ฐ์๋ฐ
http://lab.gamecodi.com/board/zboard.php?id=GAMECODILAB_Lecture&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=hit&desc=desc&no=204
ํ๋ฒ
์ฐธ๊ณ ํด๋ด
์ ๋ฐ์๋ ๋ฌ์์ง๋ง ์ ๋ํฐ ๊ธฐ์กด ํ๋ ์์ํฌ๋ ์ด๋ฏธ ์ปดํฌ์ง ํํ๋ก ์ปดํฌ๋ํธ๊ฐ ์กด์ฌํ๊ณ ์ปดํฌ๋ํธ๊ฐ ๋๋ฌด ๋ง์๊ฑธ ๋ค๊ณ ์๊ธด ํ์ง๋ง ๋ฐ์ดํฐ ์งํฅ์ ์ด๊ณ ์ค์ ๋ฃจํ์์์๋ ํ์ ๋ณ ๋ฐฐ์ด์ ๋๋ฆฌ๊ณ ์๋ค. ๋๋ฌธ์ ์คํฌ๋ฆฝํธ ์คํ์์๊ฐ ์๋๊ฑฐ๊ณ . ์์ง์ด ๋ค ํ๊ณ ์์ผ๋๊น ๊ฐ๋ฐ์๊ฐ ๊ทธ๊ฑธ ๊ตฌ์ถํ์ง ์๋๊ฒ๋ฟ์ด์ง. ๊ทผ๋ฐ ์ง๊ธ ์ ๋ํฐ ecs๋ ๋ด๋ถ์์ ํด์ฃผ๋๊ฒ ์ข๋ ์์ด์ ์ง์ ๋ค์ง์ ๋๋ ค์ค์ผํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ฌ๊ธฐ์ ์ ๋ฐ๋ ์ด์ฉ๊ณ ๋์จ๊ฑด ๋ฐ์ ์ด๊ทธ๋ก๊ธ์ด "oop ์ด์ฌํด ๋ฐฐ์๋ดค์ ecs ๋์ ๋๋ฉด ๋ค ๊ฐ๋ค๋ฒ๋ฆด ์ง์์ธ๋ฐใ ใ " ์ด๋ฐ ์์๋ฆฌํ๋ฉด์ ๋์จ๊ฑฐ์. ๋ฐ๋๊ฐ ์๋๋ผ๊ณ ๋งํ๋๊ฑด ๊ณต์กด์ด ๋๋๊ฑฐ๊ณ ์ ํฉํ๊ณณ์ ์ ์ฉํด์ ์ฐ๋๊ฑฐ๋ผ๋ ์๋ฏธ๋ค
๊ทธ ๋ง์ด ์ด์ํ๋ฉด ๊ทธ ๋ง์ ์ด ์ ํํ ๋ฐ์ง๋ ด; ๋๋ "ECS ๋ OOP์ ๊ฐ๋ฐ ์์น๊ณผ ๋์์ธํจํด์ ์ฌ์ฉํ๋ ์์คํ ์ค๊ณ๊ตฌ์กฐ" ๋ผ๋ ๋ณธ๋ฌธ์ ๋ํด์ ์ฐ๋ ๋ง์ด๋๊น
์ ์ด์ ecs๋ dod๋ ์บ์ ์คํจ์์ ์๊ธฐ๋ ๋ณ๋ชฉ์ ํด์ํ๊ณ ์ ์ค๋ฅ ์ ์ฌ๋ ค ํผํฌ๋จผ์ค๋ฅผ ์ฌ๋ฆฌ๋ ค๋ ๋ฐฉ๋ฒ์ด๊ณ , ์ด๋ฅผ ์ํ ๊ฐ๋ฐ ์์น์ ๋ฌ๋ผ์ง ์ ๋ฐ์
๋์ถฉ ์์ ๋ง ์๊ธฐํ๋๋ฐ ์ฃฝ์๊ณ ๋ฌด์ํ๊ฑฐ ํฐ๋ด๊ณ ์๋ค. ๋ ์ ๋ํฐ๋ง ๋์ ์ฌ๋ณธ๊ฑฐ์ง? ecs์ ์์น์ด composite over inheritation ์ด๊ณ ์ด๊ฒ ๋์์ธํจํด์ด๊ณ composite reuse pronciple ์ด๊ฑฐ๋ . ์ด์ค์ ๋ญ๊ฐ ์ดํด๊ฐ ์๋๋? document based / related ๊ตฌ์กฐ๊ฐ oop ๋ฅผ ๋ถ์ ํ๊ณ ๋ง๋ค์ด์ง ๊ฒ ๊ฐ๋?
์๋๋ค ๊ทธ๋ฅ ๊ทธ๋ ๊ฒ ์ด์๋ผ. ๊ธฐ์ด๋ ํ์์๊ณ ์ ๋ํฐ ๋์ ๊ฑฐ๋ ค์ ๋ช ์ ๋ง๋์ ๋ค๋๋ฐ ๋ด๊ฐ ์ฃผ์ ๋๊ฒ ๋์ฐ๋ค. ํ์ ๋ฌด์จ์ผํ๋ ๊ธฐ์ด/๊ธฐ๋ณธ์์ด ๊ฒํฅ๊ธฐ๋ก ๋ฐฐ์ฐ๊ณ ์๋์ฒํ๋ฉด์ ํ๋ณตํ๊ฒ ์ฌ์๊ธธ
๋๋ ๋ฌด์ํ ์๋ฆฌํ์ง๋ง๋ผ ์ ์ด์ oop๋ ์ ์ฐจ์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํ์ฅ์ด๊ณ ๊ทธ ๋ฐ๋์ ์๋๊ฒ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ด๋ค ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ด ๋ญ์ง๋ ์๊ณ ํ๋ ์๋ฆฌ๋?
๋๊ธ ๋ฌ์์คฌ๋๋ ๋ณธ์ธ ๋๊ธ์ด ๋ป์๋ฆฌ์ธ๊ฑฐ ์๋์ง ์ญ์ ํด๋ฒ๋ฆฌ๋คใ ใ ใ ๊ทธ๋ฆฌ๊ณ ecs ์์ฒด๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ก ์ง์ ํด์ ์บ์ ์ ์ค๋ฅ ์ ๋์ด๋ ๊ฑฐ๊ณ ์ด๋ฅผ ๊ธฐ์กด์ oop ๋ฐฉ๋ฒ์ผ๋ก๋ ์ด๋ ค์์ด ๋ง์ด ๋ฐ๋ฅธ๋ค
๊ธ์ฐ๋ค๋ณด๋ ์๊พธ ์๋์ค๊ณ ์ํ๊ธฐ ์ซ์ผ๋ ๋๋์ง์ด๊ฑด๋ฐ ๋ ๊ฐ๋ ์ด๋๊ฒ ๋ ๋ง์ฒ๋ผ ๋๊ฐ ๊ธฐ๋ณธ์ด ์์ด์ ์ค๊ณ๊ตฌ์กฐํ๊ณ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์ํ๊ณ ์ ๋ํฐ์ ๊ธฐ๋ฅํ๊ณ ์จํต ํผ์ฌ๋์ด ์์ด์ ๋ง์ด ํตํ ๋ฆฌ๊ฐ ์์ด. ๋๊ฐ ๋งํ๋ ์ ์ฐจ์ ๋๋ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ด ecs ์ค๊ณ๊ตฌ์กฐ๊ฐ ๊ฒ์๊ฐ๋ฐ์ ์ข๋ค๋ ๋ง์ด๋ ๋๋ฑ์ ๊ฐ๋ ์ด๋ผ๊ณ ์๊ฐํ๋? ๋์ค์ ํน์ ๊ธฐ๋ณธ๊ฐ๋ ์ด ์ฅ์ฐฉ๋๋ฉด ์ด๋ถํฅ์ด๋ ํด๋ผ
๊ฐ์๊ธฐ๋ค ์ง์ง ๋ณธ์ธ์ ๋ฌด์ํจ์ ์์ด ๋์ค๋๊ฑฐ์ผ ํน์? ์ ์ด์ ๋ด๊ฐ node ๋ฐฑ์๋ ๊ฐ๋ฐ์์ธ๋ฐ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ด ๋ญ์ง ๋ชจ๋ฅด๋ฉด ์กฐ์ฉํ์์ด ์ ๋ฐ.. dod๋ ๋ด๊ฐ ํ๊ทํ ๋ธ๋ก๊ทธ ๋ณด๊ณ 2014๋ ๋๋ถํฐ ํด๋ณด๋๊ฑด๋ฐ ๋ฌด์จ ํ๋ด๊ธฐ ์ ๋ํฐ ํ๋ น์ด๋?
๊ทธ๋ฆฌ๊ณ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ ์์ ์์๋ก ๋ ๊ฑฐ๊ณ ecs ์ค๋ช ํ๊ฑฐ๋ ์๋ฌด ์๊ด์ด ์์ด ๋๋ ์ธ๊ฑฐ ๊ฐ์๋ฐ ์ ๋ฐ ์ฑ ์ข ์ฝ๊ณ ๋ค๋ ;;
๋ฌด์ํ ๋์๊ฒ ์กฐ๊ธ๋ง ๋ ์ค๋ช ํด์ฃผ๋ฉด ๋ฐ์ดํฐ์ ์ปจํธ๋กค๋ฌ๊ฐ ํผ์ฌํด ์๋ ๊ธฐ์กด์ oop์ ์ฌ๊ณ ๋ฐฉ์์ผ๋ก๋ dod๊ฐ ๊ตฌํ์ด ์๋จ ์ ์ด์ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ด ๋ฐ๋๋ค๋ ๊ฑฐ์ ๊ทธ๋ฆฌ๊ณ ๋์์ธ ํจํด์ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์์ ์กด์ฌํ๋๊ฑฐ๊ณ . ์ปดํฌ์ง์ ์๊ธฐํ๋๋ฐ ๋ค๋ฅธ ํจ๋ฌ๋ค์์์๋ ๊ฐ์ ๋์์ธ ํจํด์ด ์กด์ฌํ ์๋ ์์ง ๊ทธ๊ฒ OOP๋ค? ๋ ผ๋ฆฌ๋ ฅ์ ๋ฐ์๋ฅผ ๋ณด๋ธ๋ค.
composition over inheritance ์์ฒด๊ฐ oop์ ์ฌ๊ณ ์ ํ๊ณ๋ฅผ ๊ทน๋ณตํ๊ธฐ ์ํด ๋ง๋ค์ด์ง ๋์์ธ ํจํด์ด๊ณ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ๊ณผ ์คํ๋ ค ๋ฐ์ ํ ๊ด๊ณ๊ฐ ์๋๊ฑฐ์ผ. ๋ ํน์ ๋ฆฌ์กํฐ๋ธํ๋ก๊ทธ๋๋ฐ์ด๋ผ๊ณ ์์? ํน์ ๊ทธ๋ฌ๋ฉด RxJava๊ฐ oop ์์ ์๋ค๊ณ oop์ ๋์์ธํจํด์ด๋ผ๊ณ ์๊ฐํ๋๊ฑฐ์ผ?
์๊ธฐํ๋ฉด์ ํ๋ ์ ๊ฐ๋ฅ๊ฐ์ด ๋ฐ๊พธ๋ค.
๋ ์ง๊ธ ํ๋ ์์ผ๋ก ๋๋ตํ์๋ฉด ecs ์ oop ๋ ์์ ํ ๋ ๋ฆฝ๋ ๊ฐ๋ ์ด์ผ. ๋๊ฐ ์ด๊ฑฐ ์ง๊ธ๋ง์ฒ๋ผ ์ดํดํ๊ณ ์๋ค๋ฉด ์ ์ด์ ์ ๋ฐ๋๋ ๋ญ๋ ์ด๋ฐ ๊ฐ์๋ฆฌ๊ฐ ๋์ฌ์๊ฐ ์์ด. ์ ์ด์ ecs ๋ฅผ oop ์ ๋น๊ต๊ฐ๋ฅํ ๊ฐ๋ ์ผ๋ก ๊ฐ์๋ฆฌํ๋๊น ๋ ์์ค์์ ๋งํด์ค๊ฑฐ ์๋๋. ๊ฐ์๋ฆฌ ์ปค๋ฒํ ๋ผ๊ณ ๋ ์ง์ ๊น์ง๊ณ "ํ๊ทํ" ์ด GR ํ๋ฉด ๋ ์ ๋ขฐ๋๊ฐ ์ฌ๋ผ๊ฐ๋?
ํ ์ง์ง ์๋ค๊ฝ๋งํ๋์ผ์ธ ๋๊ฐ ์ ๋ํฐ๊ธฐ๋ฅ ์ด๋ฐ ์์๋ฆฌ๋ฅผ ํ๋๊น ํ๋์๋ฆฌ์ผ oop ๋์์ธํจํด ์์ ๊ตฌํ๋์๋ค๊ณ ๊ทธ๊ฒ oop๋ค? ๊ทธ๊ฒ ๋ง์ด ์๋๋ค๊ณ ์ ์ด์ ๊ทธ๋ฐ ๋์์ธ ํจํด๋ค์ด oop์ ํต์ฌ์ด ์๋๊ณ ๋ฌธ์ ์ ๋ค์ ๊ทน๋ณตํ๊ธฐ ์ํ ๋ฐฉ๋ฒ๋ค์ด๋ผ๊ณ RxJava ์๋ก ๋ค์ด์คฌ์์ ๋ฆฌ์กํฐ๋ธ ํ๋ก๊ทธ๋๋ฐ์ oop(์๋ฐ)์์ ๊ตฌํํ๋ค๊ณ ๊ทธ๊ฒ oop๊ฐ ๋๋? oop๊ฐ ์๋๋ผ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ผ๋ก ๊ตฌํํ๊ฒ ๋๋๊ฑฐ์ผ
ecs๋ ๋ง์ฐฌ๊ฐ์ง๋ก ์ปดํฌ์ง์ ์ ํตํ ์์์ด๋ ์ฌ์ฌ์ฉ์ ์ฌ์ฉํ๋๋ผ๋ ์ ์ด์ oop ํจ๋ฌ๋ค์๊ณผ๋ ๋๋จ์ด์ง ๋ฐฉ์์ด๋ผ๊ณ oop์ ์์์ ๋ฌธ์ ์ ์ ๊ทน๋ณตํ๊ธฐ ์ํ๊ฑฐ๋๊น ๋๊ตฐ๋ค๋ unity์ ecs๋ ํ๋์จ์ด(์บ์) ํ์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๊ฒ์ผ๋ก ๋จ์ ๋์์ธ ํจํด์ด๋ผ๊ณ ํ ์์กฐ์ฐจ๋ ์๋๊ฑฐ์ผ
ใ ใ ์ ๋ฆฌ๋จ. ์๋งํผ ์๋ ๊ฒ ๊ฐ์๋ฐ ๋ ๊ธ์์ ์ด๊ฒ ์ ๋ฐ๋๋ผ๊ณ ํํํ ๊ฒ, oop๋ ์ฒ ์ง๋ ์๊ธฐ๊ณ ecs๊ฐ ๋ฌด์จ ์ค๋ฒ๋ถ๋ ์ด๋ผ๊ณ ์คํดํ ์ ์๋ ๋ถ๋ถ์ ๋ฐ์ง๊ฑฐ์. ๋ด๊ฐ ๋ณธ๋ฌธ์ ์ด๊ฑฐ ๋๋ง๋๋ก oop์ ๋์์ธํจํด์ ๋ฑ์ ์ ๋งคํ๊ฒ ํํํด์ ์คํดํ ์ ์๋๊ฑฐ ๋ง์.
๋ณธ๋ฌธ๋ง๋๋ก ECS๋ OOP์ ํ์์ ์. ๊ทธ๋ฆฌ๊ณ DOD๊ฐ OOP์ ๋ฐ๋๊ฐ ์๋์์. ๊ณต๋ถํ๋ ค๊ณ ๊ตฌ๊ธ ๊ฒ์ํด์ ๋ค์ด์จ ํ์๋ค์ ์ด๊ฑฐ ์ฝ์ด๋ณด๋ฉด ๋จ.
https://www.gamedev.net/blogs/entry/2265481-oop-is-dead-long-live-oop/
175๋
๋ณ์ ์ธ๊ฒ ์ปดํผ๋ํธ ์ปดํผ์ง์ ์์ฒด๊ฐ OOP ๋์์ธํจํด์. ECS ํน์ฑ์ ์ผ๋ฐ์ ์ผ๋ก ์ธ์ํ๋ OOP์ ํน์ง์ด ์ฝํ๊ฒ ๋ํ๋์ ๊ทธ๋ฌ๋๊ฒ. ์๊ธฐ๊ฐ ๋ฌด์จ์ด์ผ๊ธฐ ํ๋์ง๋ ๋ชจ๋ฅด๋ฉด์ ์ ์ ์น๋ฆฌํ๋ ค๊ณ ๊ตฌ๊ธ๋งํ๊ณ ๊ณต๋ถํ๋ฉด์ ๋๊ธ์ฐ๋ฉด ์ ๋ ๊ฒ๋ฉ๋๋ค.
ํ์ด๋ธ๋ฆฌ๋ ๋ถํฐ ํด๋ณด๋๊ฒ ๋ฐฐ์ฐ๋๋ฐ ํธํด. ์ ๋ํฐ๊ฐ ์์ฑ ์ ๋ฐ์ดํธ๊ฐ ์ฆ์์, ๊ณต๋ถํ๊ธฐ ์กฐ๊ธ ์ด๋ ค์ด ์ํฉ์ด๊ธด ํ์ง.