๋ฉด.์ ์ค๋นํ๋ค๋ณด๋ ๊ณผ๊ฑฐ์ ์์ฑํ๋ ์ ๊ทผ ์ ํ์ ๊ธ์ด ๋ ์ฌ๋์ด์.
๋ณธ์ธ๋ ๋ด๋น์ง๋ง ํ์ธ๋ง ๊ธฐ๋ฒ์ ์ฌ์ฉํ ๊ฒธ, ๋ ๋ด๋น์ผ๋ ์ ์๋ฟ์ง ์๋ ๊ฐ๋ ๋ค์ ์ฝ๊ฒ ์ดํดํ์ผ๋ฉด ํ๋ ๋ฐ๋์ผ๋ก ๊ธ์ ์์ฑํ์ด์.
AI ๋ธ๊นํ๋ฉด ์ ๋ณด ๋์ค๋๊ฑฐ ์๋? ์ด๋ผ๊ณ ์๊ฐํ ์๋ ์์ง๋ง, ๋ฐฐ๊ฒฝ ์ง์์ด ์์ด์ผ ๋ธ๊น์ด ๊ฐ๋ฅํ ๊ฑฐ๋ผ๊ณ ์๊ฐํด์.
๊ฒ๋ค๊ฐ ๊ธ์ ํธํฅ, ํ๊ฐ ๋ฑ ๋ด๋น ์ ์ฅ์์ ์น๋ช ์ ์ธ ๋ฌธ์ ๋ค์ด ์ธ๊ฐค์์๋ ๋ฐ๊ฒฌ๋๊ณ ์.
+์์
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํน์ง์ธ ์ถ์ํ, ์์, ๋คํ์ฑ, ์บก์ํ ์ค์์ ๋จผ์ ์์์ ๋ํด ์์๋ณด๋๋ก ํด์.
๋ด๋น ์ ์ฅ์์ ๊ฐ์ฅ ์์ฃผ ๋ง์ฃผ์น๊ณ , ์น๋ช ์ ์ธ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ ์์๊ฑฐ๋ ์.
โ์์์ด๋?
์ฌ์ค ์ ๋ํฐ๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ์์๊ณผ ์ด๋ฏธ ํ ๋ชธ์ด๋ ๋ค๋ฆ์์ด์.
cs ํ์ผ์ ์์ฑํ๋ฉด ๋ฐ๋ก ์์์ ํ์ธํ ์ ์์ด์.
์์ ์ ํด๋์ค๋ฅผ ๊ตฌํํ ๋ ๊ธฐ๋ณธ์ ์ผ๋ก MonoBehaviour ๋ฅผ ์์๋ฐ์ ๊ตฌํํ๊ฑฐ๋ ์.
+๊ธฐ๋ฅ
์์์ ์ฅ์ ์ด๋ผ๊ณ ๋ฃ๋ '์์ฑ๊ณผ ๊ธฐ๋ฅ์ ์ฌ์ฌ์ฉ๊ณผ ํ์ฅ'์ ์ฐ๋ฆฌ ๋ชจ๋ ์ด๋ฏธ ์ฌ์ฉํด๋ดค์ด์.
โ+์ ์ฝ
'์์์ ์ ๋ง ์ข์ ๊ฑฐ๊ตฐ์!' ๋ผ๊ณ ์๊ฐํ ์ ์์ง๋ง, ํฌ๋ํฐ ๋ฌธ์ ๋ฅผ ๋ด๋น๊ฐ ๊ฒช์๋งํ ์์๋ก ์์๋ณด์์.
์ฐ๋ฆฌ๋ ์์์ ๊ตฌํํ๋ Weapon ํด๋์ค๋ฅผ ์์๋ฐ์ Sword๋ผ๋ ๋ฌด๊ธฐ๋ฅผ ๊ตฌํํ์ด์.
์ ์๋ํ๊ณ , ์ดํ ํจ๋ฆฌ์ ๋ฐฉ์ด ๊ธฐ๋ฅ์ ๊ฐ์ง ๋ฌด๊ธฐ๊ฐ ํ์ํด์ ธ์ ๊ตฌํํ์ด์.
Parry ํจ์๋ฅผ ๊ฐ์ง ParryableSword๋ฅผ ๊ตฌํํ๊ณ , Block ํจ์๋ฅผ ๊ฐ์ง BlockableSword๋ฅผ ๊ตฌํํ์ด์.
์ด ๋ํ ์ ์๋ํ์ด์.
์๊ฐ์ด ํ๋ฌ ํจ๋ง๊ณผ ๋ธ๋ก์ด ๋ชจ๋ ๊ฐ๋ฅํ ๊ฒ์ ๋ง๋ค๊ฒ ๋์์ด์.
ParryableSword์ BlockableSword๋ฅผ ์์๋ฐ์ผ๋ ค๊ณ ๋ณด๋, ์๋ฟ์ธ!
C#์ ๋ค์ค ์์์ ์ง์ํ์ง ์์์.
C++์ ๋๋๋ฐ C++++๋ก ์ ๊ทธ๋ ์ด๋ ๋ C#์ ์ด์งธ์...?์ด์งธ์ C#์ ํธ๋ถ๋ชจ์ธ ๊ฑฐ์์ผ...
์ถฉ๊ฒฉ์ ๋ฐ์ ๋ด๋น๋ ํ๋ ์์์ด ParryableBlockableSword๋ฅผ Sword๋ฅผ ์์๋ฐ์ ๊ตฌํํ์ด์.
(๋ฐฉํจ๋ก ๋ง๋๋ค๊ฐ ์๋๋ผ ๊ฒ์ผ๋ก ๋ง๋๋ค!)
์ ๋์ํ๋ ๊ฒ์ ๋ณด๋ฉฐ ๋ด๋น๋ ๊ธฐ๋ถ์ด ์ข์์ง๋ง, ThrowableSword๊ฐ ๊ตฌํํ๊ณ ์ถ์ด์ก์ด์.
๊ทธ๋ฐ๋ฐ ๋์ง๋ฉด์ ํจ๋ง๋ ๋๋ ๊ฒ๋ ๋ง๋ค๊ณ , ๋ฐฉ์ด๋๋ฉด์ ๋์ง ์ ์๋ ๊ฒ๋ ๋ง๋ค๋ ค๊ณ ๋ณด๋ ๋ง๋ค์ด์ผ ํ๋ ํด๋์ค๊ฐ ์ฐ๋๋ฏธ์ฒ๋ผ ๋ถ์ด๋ฌ์ด์.
ํ์ง๋ง ๊ฐ์ธํ ์์ง๋ฅผ ๊ฐ์ง ๋ด๋น๋ ๊ฒฐ๊ตญ ํด๋ด๊ณ ๋ง์์ด์.
์ดํ, ๊ฒ ์ธ์ ์ด, ํ๋ Weapon์ ์์๋ฐ์ผ๋ฉฐ ๋ค์ํ ํด๋์ค๋ฅผ ์์ฑํ์ด์.
์๊ฐ์ด ํ๋ฌ ๊ธฐํ์ด ์ถ๊ฐ๋์๊ณ , ๋ด๊ตฌ๋ ์์คํ ์ ๋ง๋ค๊ณ ์ถ์ด์ก์ด์.
Weapon ํด๋์ค์ durability ๋ณ์์ ๊ฐ ๋ฌด๊ธฐ์ ๋ฐ๋ผ ๋ด๊ตฌ๋๋ฅผ ๊ฐ์์ํฌ, abstract ConsumeDurability์ด๋ผ๋ ํจ์๋ฅผ ์ถ๊ฐํ์ด์.
์ผ๋ฐ ๋ฌด๊ธฐ๋ ๋จ์ํ๊ฒ ๊ณต๊ฒฉ ์์ durability๋ฅผ ๊ฐ์์ํค๋ฉด ๋์์ด์.
ํ์ง๋ง ๋ค๋ฅธ ์ฌ๋ฌ ์์๊ฐ ์์ธ ๋ฌด๊ธฐ๋ค์๊ฒ๋ ์์ฒญ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํด๋ฒ๋ ธ์ด์.
ParryableSword ๋ ๊ณต๊ฒฉ ์ธ์ ํจ๋ง ์์๋, ParryableBlockableSword๋ ํจ๋ง๊ณผ ๋ฐฉ์ด, ๊ณต๊ฒฉ ์์ ๊ตฌํ์ ํด์ผํ๋ ๋ฑ ๊ฒฝ์ฐ์ ์๊ฐ ์์ฒญ๋๊ฒ ๋ง์์ก์ด์.
๊ฒ๋ค๊ฐ ThrowableSword ๋ ๋์ง ํ์์ ๋ฐ๋ผ ๋ด๊ตฌ๋๊ฐ ๊น์ฌ์ผ ํ๊ณ ์.
์ค๋ณต๋๋ ์ฝ๋๊ฐ ์ฌ๊ธฐ์ ๊ธฐ ํํธํ๋๊ณ , ๋ชจ๋ ์์๋ฐ์ ํด๋์ค๋ค์ ํ๋จํ๋ฉฐ ๊ตฌํํด์ค์ผํ๊ธฐ ์์ํ์ด์.
๊ฒ๋ค๊ฐ ConsumeDurability ํจ์๊ฐ ์กด์ฌํ์ง๋ง, ํจ๋ง, ๋ธ๋ก, ๋์ง๊ธฐ๋ ๊ฐ์ ์์์ ๋ด๊ตฌ๋๋ฅผ ๊น๊ณ ์๊ณ ์.
๊ฒฐ๊ตญ ์ด์ฐ์ด์ฐ ๊ตฌํ์ ์ฑ๊ณต์ ํ์ด์.
+๊ธฐํ ๋ณ๊ฒฝ
ConsumeDurability์ ๊ฐํ๋์ ๋ฐ๋ผ ๋ด๊ตฌ๋ ๊น์ด๋ ๊ณ์๋ฅผ ์ถ๊ฐํ๊ฒ ๋์์ด์.
๊ทธ๋ฌ๋๋ ์์๋ฐ์ ๊ตฌํ์ฒด ๋ชจ๋๊ฐ ์ปดํ์ผ ์๋ฌ๋ฅผ ๋ฟ์ด๋ฒ๋ฆฌ๊ณ ๋ง์์ด์.
๋ถ๋ชจ ํด๋์ค ํ๋๋ฅผ ๋ฐ๊พธ์๋๋ ์์ญ ๊ฐ์ ํด๋์ค๊ฐ ์ํฅ์ ๋ฐ์๋ฒ๋ฆฌ๋ ๊ฒฝ์ฐ๊ฐ ์๊ฒจ๋ฒ๋ฆฐ ๊ฑฐ์์.
๋ ํฐ ๋ฌธ์ ๋ ๋ด๊ตฌ๋๊ฐ ์์ด๋ ์ ๋ฐ์ ๋ฐ๋ฏธ์ง๋ฅผ ์ฃผ๋ ๋ฌด๊ธฐ๊ฐ ์์๋๋ฐ,
Weapon ํด๋์ค์์ ๊ทธ๊ฒ์ ์๊ณ ๋ด๊ตฌ๋๊ฐ ์์ ๋ ๊ณต๊ฒฉ์ ๋ชป ํ๋๋ก ๋ง๋ค์ด๋ฒ๋ฆฐ๊ฑฐ์์.
์ด๋ ๊ฒ ๋ผ๋ฒ๋ฆฌ๋ฉด, ์ปดํ์ผ ์๋ฌ๋ ๋ฐ์ํ์ง ์๋๋ฐ ๋ชจ๋ ์์์ ๋์์ด ๋ฐ๋์ด๋ฒ๋ ค ์๊ฐํ์ง ๋ชปํ ์น๋ช ์ ์ธ ๋ฒ๊ทธ๋ฅผ ์ป๊ฒ ๋ผ์.
(์ด ๋ฌธ์ ๊ฐ ๊ถ๊ธํ๋ค๋ฉด, 'Fragile Base Class' ์ ๋ํด ์์๋ณด์์.)
+์ญ์ฌ
์ ์ด์ C#์ด ๋ค์ค ์์๋ง ์ง์ํ๋๋ผ๋ฉด ์ด๋ ๊ฒ ํด๋์ค๊ฐ ๋ณต์กํด์ง ์ผ๋ ์์์ํ ๋ฐ... ์ด์งธ์...?
์ฌ์ค ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ๊ณผ๊ฑฐ์์๋ถํฐ ๊ฒช์ด์์ด์.
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ์ ์๋๋๊น ๊ฐ๋จํ ์ญ์ฌ๋ถํฐ ์์๋ณด์์.
๋จผ ์๋ ์์์ด๋ผ๋ ๊ฐ๋ ์ด ๋ฑ์ฅํ๊ณ C++์์ ๋ค์ค ์์์ด ๋ฑ์ฅํ์ด์.
'C#์ด ํด๋ณดํ๊ตฌ๋...' ๋ผ๊ณ ์๊ฐํ ์ ์์ง๋ง, ๋ค์ค ์์์๋ ๋ฌธ์ ๊ฐ ์์๊ธฐ ๋๋ฌธ์ด์์.
๋ฐฉ๊ธ ์ Weapon์ ์์์์ ์๊ฐํด๋ณด๋ฉด, Sword์ damage๋ฅผ ParryableSword, BlockableSword ๋ชจ๋ ๊ฐ์ง๊ฒ ๋๋ ์ํฉ์ด์์.
๋ค์ค ์์์ด ๊ฐ๋ฅํ๋๋ผ๋ฉด, ์ด๋ฅผ ์์๋ฐ์ ParryableBlockableSword๋ '๋๊ตฌ์ damage๋ฅผ ๋ฌผ๋ ค๋ฐ์์ผ ํ๋๊ฐ', 'Attack ํจ์๋ ๋๊ตฌ์ ๊ฒ์ ๋ฐ๋ผ์ผ ํ๋๊ฐ' ๋ฑ ๋ชจํธํจ์ด ๋ฐ์ํด๋ฒ๋ ค์.
(์์ธํ ๊ฒ์ '๋ค์ด์๋ชฌ๋ ๋ฌธ์ ' ๋ฅผ ์์๋ณด์์.)
์ด๋ฌํ ๋ฌธ์ ๋ก Java์์๋ ๋จ์ผ ์์์ ๊ฐ์ ํ๋, ๋ค์ค ์์์ ์ฐํํ๋ interface๋ผ๋ ๊ฐ๋ ์ด ๋ฑ์ฅํ์ด์.
C#์ Java์ ์ค๊ณ๋ฅผ ๋ฐ๋ผ๊ฐ๋ฉฐ ์ ์ฌํ๊ฑฐ๋ ๊ฐ์ ํ ๋ถ๋ถ๋ค์ด ์กด์ฌํด์.
(๊ทธ๊ฒ๊ณผ ํจ๊ป interface๋ ๋ค์ ์๊ฐ์ ์์๋ณด๋๋ก ํด์.)
์ด์จ๊ฑฐ๋ ์ฌ์ ํ ๋ค์ค ์์์ ์ฌ์ฉํ๋ ์ธ์ด๋ ์๊ณ ์๋ ์ธ์ด๋ ์กด์ฌํ์ง๋ง,
์์์๋ ์ฐ๋ฆฌ๊ฐ ์์์ ๋ดค๋ ๊ทผ๋ณธ์ ์ธ ํ๊ณ๊ฐ ์กด์ฌํด์.
๋ถ๋ชจ๋ฅผ ๊ณ ์น๋ ์๊ฐ ์์ ์ ๋ถ๊ฐ ์ํฅ์ ๋ฐ์
๊ทธ๋์ ์ฐพ๊ฒ ๋ ๋ค๋ฅธ ๊ธธ ์ค ํ๋๊ฐ Unity์ ํต์ฌ์ธ ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ๋ฐฉ์(Composition)์ด์์.
์ฐ๋ฆฌ๊ฐ ๊ฒ์์ค๋ธ์ ํธ์ Sprite Renderer, Rigidbody, Collider๋ฅผ ์ ํ์ ์ผ๋ก ๋ถ์ฐฉํ๋ ๋ฐฉ์์ด์.
MonoBehaviour๋ฅผ ํฌํจํ ๊ฐ์ข ์ปดํฌ๋ํธ๋ค์ด ๋ชจ๋ Component๋ผ๋ ํด๋์ค๋ฅผ ์์๋ฐ์,
๋ถํ์ ์กฐํฉํ๋ ๋ฐฉ์์ ์ฌ์ฉํด์ ์์์ ํ๊ณ๋ฅผ ๋ํํ๊ณ ์ ํ์ด์.
(๋ฌผ๋ก ์ด ๋ถํ๋ค๋ ์์์ ์ด์ฉํด์ ๋ง๋ค์ด์ ธ ์์ด์. ์์์ ๋ฒ๋ฆฐ ๊ฒ ์๋.)
์ดํ์๋ ์ฌ์ง์ด Go๋ Rust์ฒ๋ผ, ์์ ์์ ์์ด ์ค๊ณ๋ ์ธ์ด๋ ๋ฑ์ฅํ๋ต๋๋ค.
+๊ฒฐ๋ก
์ฐ๋ฆฌ๋ ์์์ ํน์ง๊ณผ ๋ฌธ์ ์ ์ ๋ํด ์์๋ณด์์ด์.
ํ์ง๋ง ์์์ด ๋์๊ธฐ๋ง ํ๋ค๋ฉด, ์ฐ๋ฆฌ์ MonoBehaviour๋ ์์๊ฒ ์ฃ ?
์ฆ, ์ ์ ํ ์ฌ์ฉ์ผ๋ก ์ฝ๋์ ์ฌ์ฌ์ฉ๊ณผ ํ์ฅ์ด๋ผ๋ ์ฅ์ ์ ์ทจํ๋ ๊ฒ์ด ์ค์ํ ๊ฑฐ์์.
์์์ ์ฌ์ฉํ ๋ ๊ผญ ๊ธฐ์ตํด์ผ ํ ๊ธฐ์ค์ด ์์ด์.
"์์์ ํญ์ is-a๊ด๊ณ(B๋ A๋ค)์ผ ๋ ์ฌ์ฉ"
์ง๊ธ์ ๊ฒฝ์ฐ์๋ Parry๋ Block์ด ๊ฒ์ ์ข ๋ฅ๊ฐ ์๋ ๊ฒ์ ๋ฅ๋ ฅ์ด์๋ ๊ฒ์ฒ๋ผ์.
๋ค๋ง, '๊ฒ์ ๋ฌด๊ธฐ์ด๋ค' ๋ ๋ฐ๋ก ์๋ฟ์ง๋ง, 'ํจ๋ง ๊ฒ์ ๊ฒ์ด๋ค' ์ด๋ฌ๋ฉด ํท๊ฐ๋ฆฌ๊ธฐ ์์ํด์.
๋ ผ๋ฆฌ์ ์ผ๋ก ํจ๋ง ๊ฒ์ ๊ฒ์ด ๋ง์ผ๋๊น์.
ํ์ง๋ง 'Parry'๋ ๊ฒ์ ๋๋๋ ๊ธฐ์ค์ด ์๋ ๊ฒ์ ๋ฅ๋ ฅ์ด๋ผ๋ ์ ์ ์ง์คํด์ผ ํด์.
(์ด ํท๊ฐ๋ฆผ์ SOLID ์์น ์ค ๋ฆฌ์ค์ฝํ ์นํ ์์น์์๋ ๋ค์ ๋๋ ์ ์์ด์.)
ํ์ง๋ง ๋ด๋น ์ ์ฅ์์๋ ์ ์๋ฟ์ง ์๋ ๋ง์ด๋ผ์ ์ด๋ ๊ฒ ์๊ฐํด๋ณด์์.
"์์ผ๋ก ์ด ๋ฌด๊ธฐ(ํด๋์ค)์ ๊ณ์ธต์ด ๋ ๋์ด๋ ๊น?"
๋์ด๋ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ด ๋ ๋ค๋ฉด ์์์ ํผํ๋ ๊ฒ ์ข์์.
๊ณ์ธต์ด ๊น์ด์ง๋ ๊ฒฝ์ฐ๋ผ๋ฉด ์์์ด ์๋ ์กฐํฉ์ด ํ์ํ ์ํฉ์ผ๊ฑฐ์์.
๋ฌผ๋ก ๊ฒ์ ๊ฐ๋ฐ์ ๊ธฐํ ๋ณ๊ฒฝ๋ ์ฆ์์ ํ์ ํ ์ ์๊ณ , ๋ฆฌํฉํ ๋ง๋ ๋น์ฐํ๊ฑฐ๋๊น ๋๋ฌด ๋๋ ค์ํ ํ์๋ ์์ด์.
๋ค์์๋ ์์์ ์ด์ผ๊ธฐํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ interface์ ๋ํด ์์๋ณด์์.
๋ด์ฉ๊ณผ ๊ด๋ จ๋ ๋ด๋น๋ฅผ ํฅํ ์กฐ์ธ ํ์.
๊ทผ๋ฐ ์ด๋ฐ ๊ธ์ด ์์๊ฐ ์๋์ง ๋ชจ๋ฅด๊ฒ ์.
์ข ๋ ์๋ฟ๊ฒ? ๋๊ฒ? ์๋ฉด ์ข๊ฒ ๋ค๊ณ ์๊ฐํ๋ฉฐ ์์ฑํ๋๋ฐ ํํ ๋ธ๋ก๊ทธ ๋ณต๋ถ๊ธ ๋๋์ธ๊ฐ ์ถ๊ธฐ๋ ํ๊ณ ...
๋งํฌ๋ค์ด์ด๋ ์ฝ๋๋ธ๋ก๋ ์์ด์ ๋๋ชจ ๋ถํธํ๋ค๋ณด๋ ๊ณ ๋ฏผ. ๊ทธ๋๋ง ์ด๋ฏธ์ง ๋ฑ๋ก ํธํด์ง๊ณ ai๋ก ํด๊ณ ํธํด์ก์!
๋ ๋ฐ์ด๋ธ์ฝ๋ฉ ์๋๋ผ์ ๋ด๋น๋ค์ด ์ฝ๋ฉ๊ณต๋ถ๋ฅผ ์ํ๋๊ฒ ๋์ธ๊ธด ํ ๊ฒ ๊ฐ์ ใ ใ ใ ใ ใ ใ