* ์ผ๋จ ๊บพ์ ๊ดํธ๊ฐ ์์ณ์ง๋๊ฑฐ ๊ฐ์์ ๊ทธ๋ถ๋ถ์ ์๊ดํธ ๋๊ฐ๋ก ๋์ฒดํ ๊ฒ์ ํ๋๋ค ๋๋ํ๋๊น ์์๋ค์๊ฑฐ๋ผ๊ณ ๋ฏฟ์
Zombie๋ผ๋ ํด๋์ค๊ฐ ์๊ณ
HP, Damage, Defence...์ ๊ฐ์ ์์ฑ๋ค์ Monster๋ผ๋ ํด๋์ค๋ก๋ถํฐ ์์๋ฐ๊ณ ์๊ณ
์์๋ฐ์ง ์์ ์์ฑ HowRottenIsIt ์ด๋ผ๋ ๊ฒ ์๋ค๊ณ ์ณ์
Zombie ํด๋์ค๊ฐ Monster๋ฅผ ์์ํ๋ค๊ณ ํ์ ๋
List((Monster)) [0] = new Zombie();๋ผ๊ณ ํ๋ฉด
์ค๋ฅ๊ฐ ์๋๊ณ ๋ฐฐ์ด์ ์ ๋ด๊ธฐ๋ ๊ฑฐ ๊ฐ์์
๊ทธ๋ฐ๋ฐ ๋ค๋ฅธ ํด๋์ค์์ List[0]์ ํธ์ถํ๊ณ ์์ฑ์ ๊บผ๋ด์ฐ๋ ค๊ณ ํด ๋ณด๋ฉด
๋ฐฐ์ด ์ ๋ค๋ฆญ์ด Monster๋ผ์์ธ์ง Monster๋ก๋ถํฐ ์์๋ฐ์ ์์ฑ๋ค๋ง ์ ๊ทผ์ด ๊ฐ๋ฅํ๋๋ผ๊ตฌ์
(Zombie)List[0].HowRottenIsIt ์ด๋ ๊ฒ ํด๋ ์ ๊ทผ์ด ์๋ผ์
๊ทธ๋์
Zombie zombie = (Zombie)List[0] ์ด๋ฐ ์์ผ๋ก ๋ช ์์ ๋ณํ์ ํด์ ์ง์ญ๋ณ์๋ก ๋ง๋ค์ด ์ฃผ๊ณ
zombie.HowRottenIsIt ํ๋ฉด ์ ์์ ์ผ๋ก ์ ๋ผ์
์ง๋ฌธ์์ฝ :
(Zombie)List((Monster))[0].HowRottenIsIt ์ด๋ ๊ฒ ์์ฑ ์ ๊ทผ์ด ์๋ผ์
Zombie zombie = (Zombie)List[0]์ผ๋ก ํ๊ณ
zombie.HowRottenIsIt ์ด๋ ๊ฒ ํด์ ์์ฑ์ ์ ๊ทผํ๊ณ ์๋๋ฐ
์ข๋ ํ๋ช ํ ๋ฐฉ๋ฒ์ด ์์๊น์?
์ด๊ฑด ์ด์ฉ์ ์์. ํ๋ณํ์ด ์ ์ผ ๊น๋ํด. ์๊ฐ๋๋ ์ฒซ์งธ๋ ๋ฆฌํ๋ ์ ์ผ๋ก ํ๋ ๋ฐฉ๋ฒ์ด์๋๋ฐ ์ฝ๋๋ ๋๊ธธ์ด์ง๊ณ ์ฑ๋ฅ๋ฌธ์ ๊ฐ ํฌ๊ณ . ๋์งธ๋ dynamic ํ์ ์ ์ฐ๋๊ฑด๋ฐ ์ด๊ฑด ๋ฐํ์์คํ์ ํ์์ฒดํฌ๋ผ์ ์ปดํ์ผ ์๋ฌ์ฒดํฌ๋ ์๋๊ณ , ์๋ํฐ์์ ์์ฑ์ ์๋์์ฑ, ๋ณ์๋ช ๋ฆฌํฉํ ๋ง๋ ์๋จ (๋๊ฒํ๋ ค๋ฉด ๋ ๋ฆฌํ๋ ์ ์จ์ผ๋จ) dynamic zombie = monster๋ฆฌ์คํธ[0]; Console.WriteLine($"{zombie.HowRottenIsIt}");
์ด๋ด๊ฑฐ๋ฉด ๊ทธ๋ฅ var zombie = monsters[0] as Zombie; ์ฐ๊ณ ๋ง์ง.
ํน์ ๊ด์ฐฎ์ผ์๋ฉด (Zombie)List[0].HowRottenIsIt ์ด๊ฒ ์ ๋ ผ๋ฆฌ์ ์ผ๋ก ์๋๋์ง ์ค๋ช ํด์ฃผ์ค ์ ์์ผ์ ๊ฐ์? ๋ ๊ฑฐ ๊ฐ์๋ฐ ์๋๋๊ฒ ๊ถ๊ธํด์
์ var zombie = monsters[0] as Zombie;๋ผ๋๊ฑด ๋ ์ฒ์ ์์๋ค์ ๊ฐ์ฌํฉ๋๋ค
((Zombie)monsters[0]).HowRottenIsIt ํด๋ด. ์์ ํ๋ณํ ๋ถ์ด๋๊ฑด ๋ค์๊ฑฐ ๋ค ๋๋๋ด์ ๋ณํํ๋๊ฑฐ๋ผ monsters[0].HowRottenIsIt ์ Mosterํ์ ์ HowRottenIsIt ์ด ์๊ธฐ๋๋ฌธ.
์ฐ์ ์๋ค๋ก ๊ดํธ ํ๋ ๋ ์น๊ณ .HowRottenIsIt ํ๋๊น ๋๋ค์??? ์ด๋ฐ๊ฑด ๋ชฐ๋์ด์
์๋ค๋ก ๊ดํธ ํ๋์ฉ ๋ ์น๊ณ ๋น์์ ์์ฑ ์ฐ๋๊ฑธ ๋ญ๋ผ๊ณ ๋ถ๋ฅด๋์ง์ ๋ํด ์์๋์? ๊ฒ์ํด์ ๊ณต๋ถํด๋ณด๊ณ ์ถ์๋ฐ ํค์๋๋ฅผ ๋ชจ๋ฅด๊ฒ ์ด์
as Zombie ์ด๊ฑฐ๋ is as ์ด๋ฐ ์ฐ์ฐ์(?) ๊ด๋ จํด์ ๋ฐฐ์ฐ๋ค๊ฐ ์กธ์๊ฒ ๊ธฐ์ต๋์ ๊ฒ์ํ๊ธฐ ํธํ๋ค์ ๋๋ฌด ๊ฐ์ฌํฉ๋๋ค
๊ดํธ๋ '์คํ'์ ์๋ฏธ๊ฐ ์๋๋ฐ ์ฌ๊ธฐ์ ๊ดํธํ๋ ์น๊ฑด ์ฐ์ฐ์ ์ฐ์ ์์์. ์ด๊ฑฐ๋จผ์ '์คํ'ํ๊ณ ์ ๊ฑฐ..
์ ์๋ ๋ ๋ง์ด ๋ฒ๊ณ ์ผ ์ ๊ฒ ํ์ธ์ ๊ฐ์ฌํฉ๋๋ค
์ด ์ง๋ฌธ์ ์ฑgptํํ ๋๊ฐ์ด ํ๋๊น...List monsters = new List();monsters.Add(new Zombie());Zombie zombie = monsters[0] as Zombie; // Cast to Zombieif (zombie != null){ bool isRotten = zombie.IsRotten; // Access IsRotten property}๋ผ๋ ๋ต์ ์ฃผ๋ค์์ ์๋ ์ฌ๋ํฉ๋๋ค..
์์... ์ ์ด์ ์ ๋ ๊ฒ ๋ค์ด์บ์คํ ํด์ ์ธ๊ฑด๋ฐ list๋ก ๊ด๋ฆฌํ๋๊ฑฐ ๊ต์ฅํ ์ํํ ํ์์... ๊ฐ์๋ก monster ํ์ํด๋์ค๊ฐ ๋์ด๋ ๊ฑฐ๊ณ ๊ทธ๊ฑธ ์ ์บ์คํ ์ผ๋ก ์ง์ด๋ฃ๋ ๋ฆฌ์คํธ๋ก ๊ด๋ฆฌํ ๊ฑด๋ฐ ์ธ๋ฑ์ค ์๋ชป๋ฝ์ผ๋ฉด ๋ฐ๋ก ํ๋ก๊ทธ๋จ ๋ป๊ฐ๋๊ฑด๋ฐ ์ด๊ฑฐ ์์ ๊ฒ ๋ค๊ณ ๋ค์ด๋๋ฏน ์บ์คํธ ๋์ฌํ๋ฉด ์ต์ ํ ๊ณจ๋ก๊ฐ๋๊ฑฐ์ ใ ใ
๊ทธ๋ฌ๋ฉด ํน์ ํด๋์ค๋ฅผ ์์๋ฐ๋ ๋ค์ํ ๋ชฌ์คํฐ๋ค์ ์ ์ญ๋ณ์๋ก ๊ด๋ฆฌํ ๋๋ ์ฃผ๋ก ์ด๋ป๊ฒ ํ๋ ๊ฑด๊ฐ์? github์ ์๋ text-based games๋ฅผ ์ฌ๋ฌ๊ฐ ๋ค์ด๋ฐ์์ ๋ด๋ abstract๋ง ๊ณต๊ฐํ์ง ์์ธํ ์ฝ๋๋ฅผ ๊ณต๊ฐํ๋ ๊ฒฝ์ฐ๊ฐ ์๊ทผ ์ ๊ณ ๋.ํ ๊ณผ์ ์์ค์ผ๋ก ๋ง๋ค๋ค ๋ง๊ฒ๋ง ๋ง์์ ๋ต์ ์ฐพ๊ธฐ๊ฐ ์ด๋ ต๋ค์
์ฒซ์งธ๋ ์์ ํด๋์ค ํ๋๋ฅผ ๋๋๋ก ๋ง์ด ์ถ์ํํด์ ์ํ์ ๋ฐ๊พธ์ง ์๋๊ฑฐ. ์ฆ ์ฒ์ ์์ ํด๋์ค ํ๋๋ฅผ ์งค๋ ํ์ฅ์ฑ ๊น์ง ๊ณ ๋ฏผํด์ ๋ง๋ ๋ค. ๋์งธ๋ interface๋ก ์ถ์ํํ ํ๋๋ฅผ ์์ํด๋์ค์ ๋ค์ค์์ ํจ์ผ๋ก์จ ๋คํ์ฑ๊ณผ ํ์ฅ์ฑ์ ํ๋ณดํ๋ค. ์ ์งธ๋ ํ๋ ์์ฒด๋ฅผ ์ปดํฌ๋ํธํ ์์ผ์ ๋ง๋ค์ด ๋๊ณ ์ปดํฌ๋ํธ์ ํ์ interface๋ก ๊ธฐ๋ฅ์ ์กฐ์ ํ๋ค(factory ํจํด ๊ฐ์๊ฑฐ) ๋ฑ๋ฑ..
ํฉํ ๋ฆฌํจํด์ ์กธ๋ฉด์ ๋ค์ด๋ณธ ๊ธฐ์ต์ด ์๋๋ฐ '์ ์งธ'์ '์ปดํฌ๋ํธํ'์ 'ํ์ ์ธํฐํ์ด์ค'๊ฐ ๋ฌด์จ ๋ง์ธ์ง ๊ณต๋ถํ๊ฒ ์์ด์ ๋ชจ๋ฅด๊ฒ ์ด์ ์์ ๊ฐ ์๊ฒผ๋ค์ ๊ณ ๋ง์ต๋๋ค
์ปดํฌ๋ํธํ๋๊ฒ ๋ญ ๋๋จํ๊ฑด์๊ณ ์ฌ๋์ผ๋ก ๋ฐ์ง์๋ฉด ์ฌ๋ = ์ธ๊ฐ ์ด๋ ๊ฒ ๋๋ด๋๊ฒ ์๋๋ผ ํ๋ค๋ฆฌ ๋ชจ๊ฐ์ง ์ ๋ถ ๋๋ ์ ์์ฑ์ ๋ง๊ฒ, ํ๋์ผ์ ๋ง๊ฒ ๋ถ๋ฅ ํด๋๋๊ฑฐ๋ผ ๋ณด๋ฉด๋จ. ๊ทธ๋ฅ ๋์์ธํจํด์ด๋๊ฑธ ๊ณต๋ถํด๋ด. ๋ช๋ฒ ์ฐ๋ค๋ณด๋ฉด ๋ฌด์จ์๋ฆฐ์ง ์๊ฑฐ๊ณ ๋์์ธ ํจํด ๋ช๊ฐ๋ง ์จ๋ ๋๊ฒ ๊น๋ํ๊ฒ ์ฝ๋ ์ ๋ฆฌ๊ฐ ๊ฐ๋ฅํด์ง
์ด๋ณด์ ์์ค์์ ๋ฌด์๋ฏธํ ์ง๋ฌธ์ธ๊ฑฐ ๊ฐ๊ธด ํ๋ฐ ์์ํด๋์ค์ ๊ต~์ฅํ ๋ง์ ํ๋๋ฅผ ๋๋ ๊ฑด ํ์ ์์ ํฌ๊ฒ ์๊ดํ์ง ์๋ ๊ฑด๊ฐ์? ์์ปจ๋ Npc ํด๋์ค๋ฅผ ์์๋ฐ๋ Healer๋ผ๋ ํด๋์ค๊ฐ IsHealable = true์ด๋ผ๋ ์์ฑ์ ์จ์ผ ํด์ ์์ ํด๋์ค์ธ Npc๊ฐ IsHealable์ ๋ชจ๋ ํด๋์ค์ ์์ํ๊ฒ ๋๋ค๋ฉด, ์ด๋ฐ ์ด์ ๋ก Npc ํด๋์ค๊ฐ ๊ต์ฅํ ๋ง์ ํ์ํด๋์ค์์ ๊ฐ๋ณ์ ์ผ๋ก ์ธ์ง ์์ธ์ง ๋ชจ๋ฅด๋ ์๋ง์ ์์ฑ๋ค์ ์ ๋ถ ๊ตฌ๋นํ๊ณ ์๋ ๊ฒ ๋ค์ด์บ์คํ ๋ณด๋ค ๋ซ๋ค๋ ๊ฑด๋ฐ, ์ด๋ ๊ฒ ์ฐ์ง ์๋ ์์ฑ๋ค์ด ๋ชจ๋ ๊ฐ์ฒด์ ํ ๋น๋์ด ์๋ ๊ฑด ์ฑ๋ฅ์ ์ํฅ์ ์ ์ฃผ๋์? ์ด์ฐจํผ ์ฑ๋ฅ ์ด์ ์ ๊ฐ๋ฐ ์๋ฃํด์ ์ถ์๋ถํฐ ํด์ผ ํ๋๊ฒ ์ด๋ณด์ ์ ์ฅ์ด๊ธด ํ์ง๋ง ๊ทธ๋ฅ ๊ถ๊ธํ๋ค์
๋์์ธ ํจํด์ด๋ผ๋ ๋ง๋ก ๊ฒ์ํด๋ณผ๊ฒ์ ์ ์๋ ๊ฐ์ฌํฉ๋๋ค
๊ต์ฅํ ๋ง์ ํ๋๋ ๋น์ฐํ ๋ฌธ์ ๊ฐ ๋์ง. ๊ทผ๋ฐ ์ด์ฉ์๊ฐ ์์ง ํ ๊ฒ์์ ๋ช๋ ์ด๊ณ ์ ์ง๋ณด์ํ๋ค๋ณด๋ฉด ์ฝ๋๊ฐ ์กํ์ด ๋๊ณ ๋๋๊ธฐ๊ฐ ๋๊ณ ํ๋๊ฒ ๋๋ถ๋ถ ๊ทธ๋ฐ ์ด์ . ๊ทธ๋ฆฌ๊ณ ์ด๊ฑฐ๋๋ฌธ์ ์ฒ์ ์ค๊ณ๊ฐ ์ค์ํ๊ฑฐ๊ณ ๋ ์ด๊ฒ ์ค๋ ฅ์ ์ฒ๋ ์ค์ ํ๋๊ฐ ๋ ์ ์๋๊ฑฐ๊ณ ... true false ์ฒดํฌ ๊ฐ์ ๊ฐ๋จํ ์์ธ ์ฒ๋ฆฌ๊ฐ์๊ฒ๋ ํ๋๋ก ์ถ๊ฐ ํ๋๋ ๋ง๋๋๋ ๋๊ฐ์ ๊ฒฝ์ฐ์ ํจ์ ํด๋ก์ ๋ฅผ ์ด์ฉํด์ bool ์ฒดํฌํ๋ ๋ฉ์๋ ํ๋ ๋ฐ๊ณ ๋ฝ์์ธ๊ฑฐ๊ฐ์๋ฐ... ๊ทผ๋ฐ ์ด๊ฒ๋ ์ด๋ฐ๋ฐฉ๋ฒ๋ง ์๋๊ฒ ์๋๊ณ ๊ทธ๋ฅ ์๋๋งํผ ๋ณด์ธ๋ค๊ณ ๋งํ ์ ๋ฐ์ ์์.
์ ์ด์ ์ ๋ฐ๊ฒ๋ค๋ ์ปดํฌ๋ํธ๋ ๊ฑฐ๊ธฐ์ ํ์๋๋ ํด๋์ค๋ฅผ ์ ๋ตํจํด๊ฐ์๊ฑธ๋ก ์๋ฆฌ์กฐ๋ฆฌ ์๋ฆฌํ๋ฉด ๋ค ์ฒ๋ฆฌ ๊ฐ๋ฅํ ๊ฒ๋ค์. ์ฌ๊ธฐ์ ๊ทธ๊ฑธ ๋ค ์ค๋ช ํ๋ ค๋ฉด ์๋ฐฑํ์ด์ง๋ฅผ ๋๊ธ๋ก ์ณ๋ฐ์์ผ ํ ๊ฑฐ๊ฐ์๋ฐ ๊ทธ๋ฅ ๊ตฌ๊ธ ์ ์๋๊ณผ ์ฑgpt ํ๋ํํ ๋ฌผ์ด๋ด ใ ใ ใ ;
ํคํค ๊ทธ๋ฅ ๊ณ๋ค๋ฆฌ๋ก ์๊ณ ์ถ์ ์ด๋ณด์์ฌ์์ ใ ใ ๋ง์ง๋ง๋๊ธ๊น์ง ์ฝ์ผ๋ฉด์ ์ถฉ๋ถํ ๋ค ํด์๋์ด์ ๊ฐ์ฌํฉ๋๋ค ๋ ๋ง์ด ๋ฒ์๊ณ ์ ๊ฒ ์ผํ๊ณ ์ฌํ ๋ง์ด ํ์ธ์