StatusEffect์๋ ์๋ฌด ๋ด์ฉ ์๊ณ ๊ทธ๋ฅ ๊ทธ๋ฅผ ์์ํ๋ Damage๋ Buff ๋ฌถ์ด์ List๏ผStatusEffect๏ผย ์ ๋ฃ์ด์ ์ผ๊ด ์ฒ๋ฆฌํ๋๋ฐ๋ง ์ฐ๋ ค๊ณ
์ด๋ฐ ์ผ ๋ณดํต ์์?
StatusEffect์๋ ์๋ฌด ๋ด์ฉ ์๊ณ ๊ทธ๋ฅ ๊ทธ๋ฅผ ์์ํ๋ Damage๋ Buff ๋ฌถ์ด์ List๏ผStatusEffect๏ผย ์ ๋ฃ์ด์ ์ผ๊ด ์ฒ๋ฆฌํ๋๋ฐ๋ง ์ฐ๋ ค๊ณ
์ด๋ฐ ์ผ ๋ณดํต ์์?
๊ตฌ์กฐ์ฒด ์ ๋ค๋ฆญ ์ ์ฝ์กฐ๊ฑด์ฉ ํ๊ทธ ์ธํฐํ์ด์ค ๊ฐ์๊ฑด ๋ดค๋๋ฐ ์ ๋ฐ ๊ฒฝ์ฐ์ ์ถ์ ํด๋์ค๋ ์๋๊ณ ์ผ๋ฐ ํด๋์ค๋ ๊ธ์๋ค ๊ทธ๋ฆฌ๋ ๋์ด ๋ฑํ ๊ด๊ณ๊ฐ ์์ด๋ณด์ด์ง ์๋๋ฐ
damage๋ buff์ชฝ์ ์์๋ฐ์ ์ฐ๋ ํจ์๊ฐ ์๋๊ฒ๋ ์๋๊ณ ์ง๊ธ ์ํ์์ ์ธ ์ด์ ๊ฐ ์ ํ ์์ด๋ณด์
List์ ์ค๋ค ๋ฃ์ผ๋ ค๊ตฌ...
List(StatusEffect)
์ง์ง ์ ๊ทธ๋ ๊ฒ ํ๊ณ ์ถ์ผ๋ฉด ์ธํฐํ์ด์ค๋ฅผ ์ฐ๋ ๊ฒ ๋์๋ณด์
๋ค์ด์บ์คํ ํ๊ฒ ๋ค๋ ์ด์ผ๊ธด๋ฐ ์ํฐํจํด์
๋ถํน์ ๋ค์์ Damage๊ฐ์ฒด๋ค๊ณผ Buff๊ฐ์ฒด๋ค์ ๋ฌถ์ด์ ์ ๋ฌํ๋ ค๊ณ ํ๋๋ฐ ์ด์ผํ๋๊ฒ ์ข์๊น?
๊ทผ๋ฐ ๋์ถฉ ์ ๊ทธ๋ฌ๋ ค๋์ง๋ ์ดํด ๊ฐ Sum Type ๋น์ค๋ฌด๋ฆฌํ ๊ฑธ ์ฌ์ฉํ๋ ค๋ ๊ฒ ๊ฐ์๋ฐ ์์ฝ๊ฒ๋ C#, C++ ๋๋ค ์ด๋ฐ ๊ธฐ๋ฅ์ด ์์. ๊ฐ์ฅ ๋น์ทํ ๋ฐฉ๋ฒ์ด ํ๊ทธ๋ ์ ๋์จ์ธ๋ฐ ์ด๊ฑด ๋๋ฌด ๋ฒ๊ฑฐ๋กญ๊ณ .
์ง์ ๋์์์ ์ด์ด์ ์ฐ๋๋ฐ, ๋์ด ํ๋ ค๋๊ฒ ์๋ชป๋ ๊ฑด ์๋.
์ ๊ฒ ์ปดํฌ์ง์ ์ ๊ธฐ์ด ์์์ค ํ๋์ธ sum type์ด๊ณ ํจ์ํ ์ธ์ด๋ค์ด๋ ๋ฌ์คํธ์๋ ์ด๋ฏธ ์์.
๊ทผ๋ฐ Sum type๋ฅผ ์์ ํ๊ฒ ์จ๋จน์ผ๋ ค๋ฉด Exhaustive pattern matching์ด ์์ด์ผ ํ๋๋ฐ,
์์ง ํ์ฐธ ๊ฐ๋ฐ์ค์
https://github.com/dotnet/csharplang/issues/113.
์์งํ ์ต์ 3๋ ์ ๋ ์์ด์ผ ๋์ค๋ ๋ง๋ ํ ๋ฏ.
์ด๊ฒ ์์ผ๋ฉด ๋ค์ด์บ์คํ ๊ณผ ์ ์ฌํ ๋ฐฉ๋ฒ๋ก ๋ฐ์ ์๋๋ฐ ๋ค์ด์บ์คํ ์ NPE๋ ์์ธ ๊ฐ์ , ํ์ฅ์ฑ ๋ฉด์์ ์ข ๋ง์ด ์์ฌ์.
๊ทธ๋๋ง ํ ๋งํ ๊ฑด ์ธํฐํ์ด์ค๋ก ๋ฌถ๊ณ ํ์ ์บ์คํ ๋์ ๋ฉ์๋๋ฅผ ํธ์ถํด์ ๊ฐ ํ์ ์ด ์์์ ๋์ํ๊ฒ๋ ํ๋๊ฒ ํ์ฌ๋ก์ ์ต์ ์
๊ทธ๋ฅ Damage ๋ฆฌ์คํธ๋ Buff ๋ฆฌ์คํธ ๋๊ฐ๋ก ๋๋ ์ผ๊ฒ ๋ค... ๋๊ธ๋ค ใณ
๋ ํด๋์ค์ ์ธํฐํ์ด์ค๋ฅผ ํ๋ ์์์ํค๊ณ list ์ด๋ฐ์์ผ๋ก ์ฐ๋ฉด ๋จ
์ ๋ ๊ฒ ๊ทธ๋๋ก ํ๋ฉด์ StatusEffect๋ฅผ ์ธํฐํ์ด์ค๋ก๋ง ๋ง๋ค๋ฉด ๋ฌธ์ ๋ ์๋๊ฑฐ์?
์ผ๋จ list์ ์ ๋์ ๋ฐ๋์ ํฉ์ณ์ ๋ฃ์ด์ ๋ฌด์์ ํ๊ณ ์ถ์์ง ๋ฌผ์ด๋ณด๊ณ ์ถ์ ์ด๋ค ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด ํด๋น ์ด๋ฒคํธ๋ฅผ ๋ฆฌ์คํธ์ ๋ด์๋ ๋ชจ๋ buff์ damage์ ๊ณตํต๋ ํจ์๋ฅผ ํธ์ถํ๊ณ ์ถ์๊ฑฐ์? ์๋๋ฉด ๊ฑ ๋ด์๋ ๋ฆฌ์คํธ๋ฅผ ๋ค๋ฅธ๊ณณ์ ๋๊ธฐ๊ธฐ๋ง ํ๊ณ ์ถ์๊ฑฐ์?
ํ์๋ผ๋ฉด ๋ฆฌ์คํธ๋ฅผ ๋๊ฒจ๋ฐ์ ์ชฝ์์ ๋ฌด์จ ์์ ์ ํ๋๊ฑด์ง๋ ๋งํด์ฃผ์
๋๊ฐ๋ฅผ ๋ฌถ์ด์ ํ๋์ ๋ฆฌ์คํธ๋ก ๋๊ธฐ๊ณ ๋ฆฌ์คํธ ๋ฐ์ ์ชฝ์์ ๋ฆฌ์คํธ ํ์ผ๋ฉด์ ์๊ฐ Damage์ธ์ง Buff์ธ์ง์ ๋ฐ๋ผ์ ๋ค๋ฅธ ์์ฉ์ ํ๊ฒ ํ๋ ค๋๋ฐ Damage๋ฆฌ์คํธ Buff๋ฆฌ์คํธ ๋ฐ๋ก ๋ง๋ค์ด์ ์ค๋ ์๊ด์ ์๊ฒ ๋ค... ๊ทธ๋ฅ ๋ฆฌ์คํธ ํ๋๋ก ๋ญ์น๊ณ ์ถ์ด์ ์ด๋ ๊ฒํจ
๊ทธ๋ผ ๋ด๊ฐ ๋งํ๋๋ก interface ํ๋๋ฅผ ์์๋ฐ๊ฒ ํ๊ณ buff, damage ๋ ๋ค ์์๋ฐ์ ์ธํฐํ์ด์ค๋ฅผ overrideํด์ ์ฌ์ ์ ๊ตฌํํด๋์ผ์ ๊ทธ๋ฆฌ๊ณ ๋ฆฌ์คํธ๋ฅผ ๋ฐ์ ์ชฝ์์ ๋จ์ํด foreach(์์ in list) { ์์.์ธํฐํ์ด์คํจ์()} ์ด๋ ๊ฒ ํ๋ฉด buff, damage ์ด๋ ต๊ฒ ๊ตฌ๋ถํ ๊ฑฐ์์ด ์์์ ์๊ธฐ๋ค ๊ธฐ๋ฅ์ ์ํํ ๊ฑฐ์
Damage๋ Buff๋ ๊ณตํต๋ ์ด๋ฆ ํจ์ ์ฐ๋๊ฒ๋ ์์ด ์ง์ง IStatusEffect๋ ์์ ๋น์์ ธ์๋๊ฑฐ์
์๋ฌด๋ฆฌ ๋น์์ ธ์๋ค๊ณ ํด๋ ํ์ ์ ๋ถ๊ฐํด์ผํ๋ ํ์ด๋ฐ์ด ์ฌ๊ฑฐ์๋? ๊ทธ ๊ตฌ๊ฐ์ ๋ฉ์๋ํ ์ํค๋๊ฑฐ์
์ IStatusEffect์ [...] ๊ฐ์ ๋ฉ์๋ ๋ฃ์ด์ ๊ทธ ์์์ธ Damage๋ Buff๋ ๊ทธ๊ฑฐ ์ค๋ฒ๋ผ์ด๋ํ๋ค์ ์๊ธฐ ํ์ ์ด ํด์ผํ ์ผ์ ๊ทธ๊ฑธ๋ก ์ฐ๋ผ๋๊ฑฐ์ผ?? ์ข์ฉ๋๋ฐ ํ๊ณ ์ถ์๋ง์ด ์ด๊ฑฐ๋ง์?
๊ทธ๋๊น ๋น์์ ธ์๋๊ฑด ์๊ด์๊ณ ์ธํฐํ์ด์ค ์ฐ๋ผ๋๊ฑฐ ์์ฒด๊ฐ ํ๋์ list๋ก ๊ด๋ฆฌํ๊ธฐ ์ํจ์ด๋ผ๋๊ฑฐ์ list<์ธํฐํ์ด์ค> ์ด๋ฌ๋ฉด buff, damage ๋๋ค ๋ฆฌ์คํธ์ ์ฝ์ ์ด ๊ฐ๋ฅํ์์ด ๊ทธ๋ฆฌ๊ณ ๊ณตํต๋ ํจ์ ๊ธฐ๋ฅ์ ๋ง๋ค๋ผ๋๊ฒ ์๋๋ผ ๊ฑ ์ด๋ฆ๋ง ๊ฐ๋ค ์ฐ๊ณ ๊ฐ์ ๊ธฐ๋ฅ์ ๋ค๋ฅด๊ฒ ๊ตฌํํ๋ฉด ๋๋๊ฑฐ
๋์ซ์ฒ์ฌ์ธ๋ฏ;;;
๋ถ๋ชจํด๋์ค์ update๊ฐ์ ๊ฐ์ํจ์ ๋ฃ๊ณ ์์์์ผ์ ๋ค๋ฅธ ์์ํด๋์ค์์ update์ ๊ฐ๊ฐ์ ํ์ํ ๋ก์ง์ ๊ตฌํํ๋ ๋ฑ ๋คํ์ฑ์ ์ด์ฉํด์ ์ฌ๋ฌ ํ์ ์ ์์ํด๋์ค๋ฅผ ๊ด๋ฆฌํ๋ ๊ฒฝ์ฐ๋ ์์