"์•ˆ๋…•, ์•„๋ฏธ๊ณ !"

"์•ˆ๋…•, ์—˜๋ฆฌ!"

"์˜ค๋Š˜์€ ๋ฆฌ์‹œ์™€ ์ œ๊ฐ€ ์ œ๋„ค๋ฆญ์— ๋Œ€ํ•œ ๋ชจ๋“  ๊ฒƒ์„ ์•Œ๋ ค๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค."

"์ž ๊น, ๋‚˜๋Š” ์ด๋ฏธ ๊ฑฐ์˜ ๋ชจ๋“  ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™์•„."

"๊ฑฐ์˜ ์ „๋ถ€์ง€๋งŒ ์ „๋ถ€๋Š” ์•„๋‹™๋‹ˆ๋‹ค."

"์ •๋ง์š”? ์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค. ๋“ค์„ ์ค€๋น„๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค."

"๊ทธ๋Ÿผ ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค."

"Java์—์„œ ์ œ๋„ค๋ฆญ์€ ์œ ํ˜• ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋Š” ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค."

"์ œ๋„ค๋ฆญ์ด ๋ฐœ๋ช…๋œ ์ด์œ ๋Š” ์ฝ”๋“œ์˜ ์ฃผ์„์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค."

์˜ˆ
ArrayList stringList = new ArrayList();
stringList.add("abc"); // Add a string to the list
stringList.add("abc"); // Add a string to the list
stringList.add( 1 ); // Add a number to the list

for(Object o: stringList)
{
 String s = (String) o; // There will be an exception here when we get to the integer
}

์ œ๋„ค๋ฆญ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:

์˜ˆ
ArrayList<String> stringList = new ArrayList<String>();
stringList.add("abc"); // Add a string to the list
stringList.add("abc"); // Add a string to the list
stringList.add( 1 ); // There will be a compilation error here

for(Object o: stringList)
{
 String s = (String) o;
}

"์ด ์ฝ”๋“œ๋Š” ์ปดํŒŒ์ผ๋˜์ง€ ์•Š์œผ๋ฉฐ ์ž˜๋ชป๋œ ๋ฐ์ดํ„ฐ ์œ ํ˜•์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜๋Š” ์ปดํŒŒ์ผ ์ค‘์— ๋ฐœ๊ฒฌ๋ฉ๋‹ˆ๋‹ค."

"์˜ˆ, ์ด๋ฏธ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค."

"์ข‹์•„, ์ข‹์•„. ๋ฐ˜๋ณต์€ ๋ฐฐ์›€์˜ ์–ด๋จธ๋‹ˆ๋‹ค."

"ํ•˜์ง€๋งŒ Java์˜ ์ œ์ž‘์ž๋Š” ์ œ๋„ค๋ฆญ์„ ๋งŒ๋“ค ๋•Œ ์•ฝ๊ฐ„ ๊ฒŒ์„๋ €์Šต๋‹ˆ๋‹ค. ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ๋ณธ๊ฒฉ์ ์ธ ์œ ํ˜•์„ ๋งŒ๋“œ๋Š” ๋Œ€์‹  ๋งค๋„๋Ÿฌ์šด ์ตœ์ ํ™”์— ๋น ์กŒ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ๋Š” ์ œ๋„ค๋ฆญ์— ์œ ํ˜• ๋งค๊ฐœ ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  ๋ชจ๋“  ์ปดํŒŒ์ผํ•˜๋Š” ๋™์•ˆ ๋งˆ๋ฒ•์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค."

์ œ๋„ค๋ฆญ์„ ์‚ฌ์šฉํ•œ ์ฝ”๋“œ
List<String> strings = new ArrayList<String>();
strings.add("abc");
strings.add("abc");
strings.add( 1); // Compilation error

for(String s: strings)
{
 System.out.println(s);
}
์‹ค์ œ๋กœ ์ผ์–ด๋‚˜๋Š” ์ผ
List strings = new ArrayList();

strings.add((String)"abc");
strings.add((String)"abc");
strings.add((String) 1); // Compilation error

for(String s: strings)
{
 System.out.println(s);
}

"๊น”๋”ํ•˜๋„ค."

"์˜ˆ, ํ•˜์ง€๋งŒ ์ด ์ ‘๊ทผ ๋ฐฉ์‹์—๋Š” ๋ถ€์ž‘์šฉ์ด ์žˆ์Šต๋‹ˆ๋‹ค.  ์œ ํ˜• ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ์ •๋ณด๋Š” ์ผ๋ฐ˜ ํด๋ž˜์Šค ๋‚ด์— ์ €์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ์ ‘๊ทผ ๋ฐฉ์‹์€ ๋‚˜์ค‘์— ์œ ํ˜• ์‚ญ์ œ  ๋กœ ์•Œ๋ ค์ง€๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค ."

"์ฆ‰, ์œ ํ˜• ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋Š” ๊ณ ์œ ํ•œ ํด๋ž˜์Šค๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ํด๋ž˜์Šค ๋‚ด์—์„œ ํ•ด๋‹น ํด๋ž˜์Šค์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."

์ œ๋„ค๋ฆญ์„ ์‚ฌ์šฉํ•œ ์ฝ”๋“œ
class Zoo<T>
{
 ArrayList<T> pets = new ArrayList<T>();

 public T createAnimal()
 {
  T animal = new T();
  pets.add(animal)
  return animal;
 }
}
์‹ค์ œ๋กœ ์ผ์–ด๋‚˜๋Š” ์ผ
class Zoo
{
 ArrayList pets = new ArrayList();

 public Object createAnimal()
 {
  Object animal = new ???();
  pets.add(animal)
  return animal;
 }
}

"์ปดํŒŒ์ผํ•˜๋Š” ๋™์•ˆ ๋ชจ๋“  ๋งค๊ฐœ๋ณ€์ˆ˜ ์œ ํ˜•์ด Object๋กœ ๋Œ€์ฒด๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํด๋ž˜์Šค ๋‚ด๋ถ€์—๋Š” ์ „๋‹ฌ๋œ ์œ ํ˜•์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค."

"์˜ˆ, ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒŒ ์ตœ๊ณ ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค."

"๊ทธ๋ ‡๊ฒŒ ๋ฌด์„ญ์ง€ ์•Š์•„. ๋‚˜์ค‘์— ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๋ ค์ค„๊ฒŒ."

ํ•˜์ง€๋งŒ ๋” ์žˆ์Šต๋‹ˆ๋‹ค. Java๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์œ ํ˜• ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์ƒ์œ„ ์œ ํ˜•์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด extends ํ‚ค์›Œ๋“œ๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด:

์ œ๋„ค๋ฆญ์„ ์‚ฌ์šฉํ•œ ์ฝ”๋“œ
class Zoo<T extends Cat>
{
 T cat;

 T getCat()
 {
  return cat;
 }

 void setCat (T cat)
 {
  this.cat = cat;
 }

 String getCatName()
 {
  return this.cat.getName();
 }
}
์‹ค์ œ๋กœ ์ผ์–ด๋‚˜๋Š” ์ผ
class Zoo
{
 Cat cat;

 Cat getCat()
 {
  return cat;
 }

 void setCat(Cat cat)
 {
  this.cat = cat;
 }

 String getCatName()
 {
  return this.cat.getName();
 }
}

"๋‘ ๊ฐ€์ง€ ์‚ฌ์‹ค์— ์œ ์˜ํ•˜์‹ญ์‹œ์˜ค."

"์ฒซ์งธ, ์–ด๋–ค ์œ ํ˜•๋„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. Cat ๋˜๋Š” Cat์„ ์ƒ์†ํ•˜๋Š” ํด๋ž˜์Šค๋งŒ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."

"๋‘ ๋ฒˆ์งธ๋กœ, Zoo ํด๋ž˜์Šค ๋‚ด์—์„œ T ์œ ํ˜•์˜ ๋ณ€์ˆ˜๋Š” ์ด์ œ Cat ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.  ์˜ค๋ฅธ์ชฝ ์—ด์— ๊ทธ ์ด์œ ๊ฐ€ ์„ค๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค(T๊ฐ€ ์žˆ๋Š” ๋ชจ๋“  ๊ณณ์—์„œ Cat์ด ๋Œ€์ฒด๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค)."

"์˜ˆ. Cat ๋˜๋Š” Cat์˜ ํ•˜์œ„ ํด๋ž˜์Šค๊ฐ€ ์œ ํ˜• ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋œ๋‹ค๊ณ  ํ•˜๋ฉด ์œ ํ˜• T๊ฐ€ ํ•ญ์ƒ Cat ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์งˆ ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค."

"๊ธ€์Ž„์š”, ๋˜‘๋˜‘ํ•˜๊ตฐ์š”."