์์ ๋ชจ๋ฅด์ง๋ง ๊ฐ์ธ์ ์ผ๋ก ์ธํฐํ์ด์ค ์ฐ๋ฉด์ ์ข๋ค๊ณ ์๊ฐํ๋๊ฑด ๋คํ์ฑ.
๋คํ์ฑ์ ๋ํดย ๋ด๊ฐ ์ดํดํ๊ณ ์๋๊ฑด Fighter์ Mage ํด๋์ค๋ฅผ Human์ด๋ผ๋ ๋์ผํ ์ํผํด๋์ค๋ฅผ ์์ ๋ฐ๊ฒ ํ๋ฉด
Fight: Human
Mage: Human
Human์ ๋ํ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค์ด์ Human์ ์์ํ๊ณ ์๋ Fighter๋ Mage์ ์ค๋ธ์ ํธ๋ค์ ๋ฃ์ ์ ์์.
List humans = new List();
humans.add(new Fighter());
humans.add(new Mage());
๊ทธ๋ฌ๋ฉด ์ผ๊ด์ ์ผ๋ก Human ํด๋์ค๊ฐ ๊ฐ์งย attack() ์ฝ ํ ๋ ์๋์ฒ๋ผ ํ๋ฒ์ ์ฝ๊ฒ ํ ์ ์์.
humans.forEach(o => {
o.attack();
});
์๊น์ง ๋ด๊ฐ ์๊ฐํ๋ ๋คํ์ฑ. ๊ณตํต์ ์ด ์๋ ๊ฒ๋ผ๋ฆฌ ๋ฌถ์ด์ ์ข ๋ ํธํ๊ฒ ์ฐ๋ ๊ทธ๋ฐ๊ฑฐ??ย ๋ ๋ณต์กํ๊ณ ์ ๋ฌธ์ ์ธ ๋ด์ฉ์ ์ ๋ชจ๋ฆผ.
์๋ฌดํผ Fighter๋ Mage๋ฅผ ๋ง๋ค์๋๋ฐ, ๊ฐ์๊ธฐย ๊ธฐํ์ด ๋ฐ๋๊ฑฐ์. heal() ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ฉด์, Priest ํด๋์ค๋ฅผ ์ถ๊ฐํด์ผ๋จ.
๊ทธ๋ฆฌ๊ณ Mage๋ attack()๊ณผ heal() ๋๊ฐ์ง๋ฅผ ๊ฐ์ง๋๋ก ๋ณ๊ฒฝ๋จ.
Fighter->attack()
Mage->attack(), heal()
Priest->heal()
Mage๋ Fighter๋ Human์ผ๋ก ๋ฌถ์ด๊ณ , Priest๋ Mage๋ heal()์ ๊ฐ์ง ์ด๋ค ํด๋์ค๋ก ๋ฌถ์ผ๊ฑฐ ๊ฐ์ง๋ง...
c#์์ ๋ค์ค ์์์ด ์๋จ, Mage: Human, Healer ๊ฐ์๊ฒ ์๋จ. ๊ทธ๋์ ํ๋ฒ์ ๋ฌถ๊ธฐ๊ฐ ์ข ์ ๋งคํด์ง.
Human์ heal()์ ๋ฃ์ผ๋ฉด ๋๋ค๊ณ ์๊ฐํ ์ ์์ง๋ง, heal()์ด ์๋๋ Fighter๋ฅผ Healers ๊ฐ์ ์ปจํ ์ด๋์ ๋ฃ๊ธฐ๋ ์ซ๊ณ , heal() ๋ฉ์๋๋ฅผ ๊ตฌํํ๊ณ ์ถ์ ๊ธฐ๋ถ๋ ์๋. ๊ทธ๋ฅ ๊ทธ๋ผ.
์ด๊ฑธ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ด ์ธํฐํ์ด์ค
๊ณต๊ฒฉ ๊ฐ๋ฅํ ์ธํฐํ์ด์ค๋ผ๋ ๋๋์ผ๋ก IAttackable ์ด๋ผ๋ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ฌ, ๊ทธ๋ฆฌ๊ณ IHealable๋ ๋ง๋ฌ.
interface IAttackable
{
int attack();
}
๊ทธ๋ฆฌ๊ณ ๊ฐ ์ง์ ํด๋์ค๋ค์ด ์ธํฐํ์ด์ค๋ฅผ ์์(?)ํ๋๋ก ๋ง๋ฌ. ์ ํํ ์ฉ์ด๋ ์ ๋ชจ๋ฆฌ๊ฒ ์...
Fighter: IAttackable
Mage: IAttackable, IHealable
Priest: IHealable
์ด๋ ๊ฒ ์ธํฐํ์ด์ค๋ฅผ ๋ถ์ด๋ฉด ๊ธฐ์กด List์ย List attackers ๋ผ๋ ์ปจํ ์ด๋๋ก ๋ฐ๊พธ๋ฉด, ์ด์ ์ฒ๋ผย Fighter๋ Mage๋ฅผ ๋ฃ์ ์ ์๊ณ , attackers.forEach() ๋ฅผ ์ด์ฉํ์ฌ ์ปจํ ์ด๋๋ฅผ ์ํํ๋ฉด์ attack()์ ์ฝ ํ ์ ์์.
List healers ๋ฅผ ๋ง๋ค๋ฉด Mage์ Priest๋ฅผ ํ๋ฒ์ ์ฒ๋ฆฌํด์ค ์ ์์. ์ด๋ฐ ๊ธฐ๋ฅ ๋จ์๋ก ๋ฌถ์ ์ ์๋ ๊ฟ๊ธฐ๋ฅ์ด ์ธํฐํ์ด์ค๋ผ๊ณ ์๊ฐํจ.
์ธํฐํ์ด์ค๋ public method๋ฅผ ์ ์๋งํด๋๋ฉด ์ฐ๋ ์ฌ๋์ด ์์ธ๊ตฌํํ๋ฉด ๋๋๊ฑฐ๋ผ์ ๋ญ๊ฐ ์ข ํฉ๋ฆฌ์ ์.
์ถ์ ํด๋์ค๋ ์ธํฐํ์ด์ค๋ ๋ฌด์จ ์ฐจ์ด๊ฐ ์๋๊ณ ์ง๋ฌธํ๋ฉด ๊ทธ ํด๋ต์ ์ฐพ๋ ์ฆ๊ฑฐ์์ ๋ ์์๊ฒ ๋จ๊ธด๋ค๋ ๋ง๋ก ๋์ฒด.
ใ ใ
์ ์ด์ ๋ค์ค์์์ ๋ชฉ์ ์ด ์ธํฐํ์ด์ค๋ผ์
์ํ ...
C++์์ ์ง๊ธ ์๋ ค์ ธ์๋ ์ธํฐํ์ด์ค์ ์ฉ๋๋ก ์ฐ๊ธฐ์ํด ํด๋์ค๋ฅผ ๋ค์ค์ผ๋ก ์์ํ๊ฒ ๋ง๋ฆ -> ๋ค์ค์์ ์ ์๋ง์ ๋ฌธ์ ์ ๋ฐ์(์ข ๋ฅ๋ ๋ง์ ๋๊ธ๋ก ์ฐ๊ธฐํ๋ฆ) -> ํด๋์ค๋ ํ๋๋ง ์์, ์ธํฐํ์ด์ค๋ฅผ ์ฌ๋ฌ๊ฐ ์์ํ ์ ์๋๋ก ๋ฌธ๋ฒ ๊ตฌ์ฑ(์๋ฐ) ์ด๋ฐ ํ๋ฆ์
์๋์ ๊ฐ์ฌ