"์ด์ ์๋กญ๊ณ ํฅ๋ฏธ๋ก์ด ์ฃผ์ ์ธ ์์ผ๋์นด๋์ ๋๋ค."
"๋ณธ์ง์ ์ผ๋ก ์ด๊ฒ์ ๋ฌด์์ด๋ ์ผ์นํ๋ ยซ*ยป ํจํด๊ณผ ๊ฐ์ ๊ฒ์ ๋๋ค."
"ํ์ง๋ง ์ฒ์๋ถํฐ ์์ํฉ์๋ค."
"Warrior ํด๋์ค์ ๋ ์ ์ฌ ์ค ์ด๋ ์ชฝ์ด ๋ ๊ฐํ์ง ๊ฒฐ์ ํ๋ ๋ฉ์๋๊ฐ ์๋ค๊ณ ์์ํด ๋ณด์ญ์์ค. ๋ค์๊ณผ ๊ฐ์ด ๋ณด์ผ ์ ์์ต๋๋ค."
class WarriorManager
{
public static boolean fight(Warrior w1, Warrior w2)
{
return w1.power > w2.power;
}
}
MagicWarrior mag = new MagicWarrior();
ArcherWarrior archer = new ArcherWarrior();
boolean isMagicCooler = WarriorManager.fight(mag, archer);
"MagicWarrior์ ArcherWarrior๋ ๋ชจ๋ Warrior๋ฅผ ๊ณ์นํฉ๋๋ค. ."
"์ฝ๊ฐ ๋จ์ํ์ง๋ง ์๋ฅผ ๋ค์ด ๊ทธ๋ ๊ฒ ํ ๊ฒ์ ๋๋ค."
"์ข์์."
"์ด์ ์ฌ๋ฌ ์ ์ฌ๊ฐ ๊ฐ๋ดํ ์ํฉ์์ ๋น์ทํ ๋ฐฉ๋ฒ์ ๋ง๋ค๊ธฐ๋ก ํ๋ค๊ณ ๊ฐ์ ํด ๋ด ์๋ค."
class WarriorManager
{
public static boolean fight(Warrior w1, Warrior w2)
{
return w1.power > w2.power;
}
public static boolean fight(List<Warrior> w1, List<Warrior> w2)
{
return โฆ
}
}
ArrayList<MagicWarrior> magi = new ArrayList<MagicWarrior>();
for(int i = 0; i < 10; i++)
magi.add(new MagicWarrior());
ArrayList<ArcherWarrior> archers = new ArrayList<ArcherWarrior>();
for(int i = 0; i < 10; i++)
archers.add(new ArcherWarrior());
boolean isMagicCooler = WarriorManager.fight(magi, archers); // Compilation error!
"ํ์ง๋ง ์ฌ๊ธฐ์์ ์ปดํ์ผ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ณ ๋ฌด์์ด ์๋ชป๋์์ ์ ์๋์ง ์์ํดํฉ๋๋ค."
"๋ฌธ์ ๋ MagicWarrior๊ฐ Warrior๋ฅผ ์์ ํ๊ณ MagicWarrior ๊ฐ์ฒด๋ฅผ fight(Warrior, Warrior) ๋ฉ์๋๋ก ์ ๋ฌํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค."
"๊ทธ๋ฌ๋ List<MagicWarior> ๋ List<Warrior> ๋ฅผ ์์ํ์ง ์์ต๋๋ค . ๋ฐ๋ผ์ ๊ฑฐ๊ธฐ์ ์ ๋ฌํ ์ ์์ต๋๋ค!"
"๋ฌผ๋ ค๋ฐ์ง ์๋๋ค๋ ๊ฒ ๋ฌด์จ ๋ป์ด์ผ?"
"์ ๋ง์ ํ๋๋ ๋ชฉ๋ก์ด๊ณ ๋ค๋ฅธ ํ๋๋ ๋ชฉ๋ก์ด์ง๋ง ์ ํ ๋งค๊ฐ๋ณ์๊ฐ ์๋ค๋ ๊ฒ์ ๋๋ค."
"๋ค ๋ง์ด ๋ง์. ์ด์งธ์์ธ์ง ๋ฐ๋ก ๋์น์ฑ์ง ๋ชปํ์ด. ๊ทธ๋ผ ์ด ๋ฌธ์ ์ ๋ํ ํด๊ฒฐ์ฑ ์ ์ด๋ฏธ ์๋ ๊ฑฐ์ง?"
"์. ๋ ๋ณต์กํ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ๋ค์๊ณผ ๊ฐ์ด ํ์๋ฉ๋๋ค."
class WarriorManager
{
public static boolean fight(Warrior w1, Warrior w2)
{
return w1.power > w2.power;
}
public static boolean fight(List<? extends Warrior> w1, List<? extends Warrior> w2)
{
return โฆ
}
}
"? ์ ์ฌ ํ์ฅ" ๋ถ๋ถ์ "์ ์ฌ๋ฅผ ๊ณ์นํ๋ ๋ชจ๋ ์ ํ"์ ์๋ฏธํฉ๋๋ค."
"์ฆ, ์ด์ List<MagicWarrior> ๋ฐ List<ArcherWarrior>๋ฅผ ์ ๋ฌํ ์ ์์ผ๋ฉฐ ๋ชจ๋ ๊ฒ์ด ์๋ํฉ๋๋ค."
"๊ต์ฅํ๋ค์. ๊ทธ๋ฐ ๋ฌธ์ ๊ฐ ์ ์์๋ก ์ข์ต๋๋ค."
"๋๋ ๊ทธ๋ฐ ๊ธฐ๋ถ์ด์ผ."
"ํ์ง๋ง Warrior๋ฅผ ์์ํ๋ ๊ฒ์ด ํ์ํ์ง ์๋ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํฉ๋๊น? ์ ํ ๋งค๊ฐ๋ณ์๊ฐ ์๋ ๋ชจ๋ List๋ฅผ ๋ฉ์๋์ ์ ๋ฌํ ์ ์๊ธฐ๋ฅผ ์ํ๋ฉด ์ด๋ป๊ฒ ํฉ๋๊น? ํ์ฉ๋ฉ๋๊น?"
"์, ๋ ๊ฐ์ง ํ์์ ํ๊ธฐ๋ฒ์ด ์์ต๋๋ค."
List<? extends Object>
List<?>
"๋ ๋ค ๊ฐ์ ๊ฒ์ ์๋ฏธํ๋ฏ๋ก ์ผ๋ฐ์ ์ผ๋ก ๋ ๋ฒ์งธ ๋ฒ์ ์ด ์ฌ์ฉ๋ฉ๋๋ค."
"์ค๋์ ๊ทธ๊ฒ ๋ค์ผ."
"๊ณ ๋ง์ ์๋ฆฌ. ์ค๋ ์ ๋ง ๋ง์ด ๋ฐฐ์ ์ด."