Genericμ λͺ¨λ μ’ λ₯μ νμ μ λ€λ£° μ μλλ‘ ν΄λμ€λ λ©μλλ₯Ό μ λ€λ¦ νμ 맀κ°λ³μλ₯Ό μ΄μ©νμ¬ μ μΈνλ κΈ°λ²μ΄λ€. μ½κ² λ§νλ©΄, μ λ€λ¦μ λ°μ΄ν° νμ μ λ³μμ²λΌ μ μΈνλ κ²μ΄λ€.
μ λ€λ¦μ μ¬μ©ν¨μΌλ‘μ μ»λ μ₯μ μ μλμ κ°λ€.
1. νμ
μμ μ±(Type Safety): μ λ€λ¦μ μ¬μ©νλ©΄ μ»΄νμΌλ¬κ° μ½λμμ λ°μν μ μλ νμ
κ΄λ ¨ μ€λ₯λ₯Ό 미리 κ²μΆν μ μλ€.
2. μ½λ μ¬μ¬μ©μ±: λμΌν κΈ°λ₯μ κ°μ§ ν΄λμ€λ λ©μλλ₯Ό μ¬λ¬ λ°μ΄ν° νμ
μ λν΄ λ€μ μμ±νμ§ μκ³ μ¬μ¬μ©ν μ μλ€.
3. μ€κ³μ μΌλ°ν: μ λ€λ¦μ μ¬μ©νλ©΄ νΉμ νμ
μ μμ‘΄νμ§ μλ μΌλ°μ μΈ λμμΈμ ν μ μλ€.
4. μ±λ₯ κ°μ : μ λ€λ¦μ μ¬μ©νλ©΄ μ»΄νμΌ μκ°μ νμ
λ³ν μ½λκ° μμ±λλ―λ‘ μ€ν μκ°μ λΆνμν νμ
κ²μ¬λ ν λ³νμ νμ§ μμλ λλ€.
μ λ€λ¦ νμ 맀κ°λ³μλ μ£Όλ‘ E(Element) , T(Type), V(Value), K(Key)λ₯Ό μ¬μ©νλ€.
μ λ€λ¦ νμ <T>λ₯Ό κ°μ§ μ λ€λ¦ ν΄λμ€μ λͺ¨μ΅μ κ°λ΅ν λνλΈ κ²μ΄λ€.
class Stack<T> {
...
void push (T item) { ... }
T pop() { ... }
...
}
μμ μ½λ
class GStack<T> { //<T>: λͺ¨λ νμ
μ λ°μ
public int tos; //ν΄λμ€ μ 체μ μν₯μ λ―ΈμΉλ μ μλ³μ
Object[] stck;
public GStack(){
this.tos = 0;
stck = new Object[10]; //μμμ κ°μκ° 10μΈ λ°°μ΄ μμ±
}
public void push(T item){
if(tos == 10) return;
stck[tos] = item;
tos ++;
}
public T pop(){
if(tos == 0) return null;
tos --;
return (T)stck[tos];
}
}
public class GenericTest {
public static void main(String[] args) {
GStack<Object> stringStack = new GStack<>();
stringStack.push("Seoul");
stringStack.push("Busan");
stringStack.push("LA");
stringStack.push(24); //int String λ± λͺ¨λ νμ
κ°λ₯
for(int i=0; i<4; i++)
System.out.println(stringStack.pop());
}
}
console
Seoul
Busan
LA
24