π μ λ€λ¦ (Generic)
νμ μ ꡬ체μ μΌλ‘ μ§μ νλ κ²μ΄ μλλΌ, μΆνμ μ§μ ν μ μλλ‘ μΌλ°νν΄λλ κ²
보νΈμ μΌλ‘ μ¬μ©νλ νμ 맀κ°λ³μ
νμ | μ€λͺ |
<T> | Type |
<E> | Element |
<K> | Key |
<V> | Value |
<N> | Number |
<R> | Result |
π μ λ€λ¦ ν΄λμ€
μ λ€λ¦μ΄ μ¬μ©λ ν΄λμ€
class Basket<T> {
private T item;
public Basket(T item) {
this.item = item;
}
public T getItem() {
return item;
}
public void setItem(T item) {
this.item = item;
}
}
class Basket<T> {
private T item1; // O
static T item2; // X (ν΄λμ€ λ³μ)
}
- ν΄λμ€ λ³μμλ νμ 맀κ°λ³μ Tλ₯Ό μ¬μ©ν μ μλ€.
- νμ 맀κ°λ³μμ μΉνλ νμ μΌλ‘ κΈ°λ³Έ νμ μ μ§μ ν μ μλ€. Wrapper ν΄λμ€λ₯Ό νμ©ν΄μΌ νλ€.
- λ€νμ±μ μ μ©ν μ μλ€.
π μ νλ μ λ€λ¦ ν΄λμ€
class Flower { ... }
class Rose extends Flower { ... }
class RosePasta { ... }
class Basket<T extends Flower> { // Flowerμ νμ ν΄λμ€λ§ μ§μ νλλ‘ μ ν
private T item;
...
}
interface Plant { ... }
class Flower implements Plant { ... }
class Rose extends Flower implements Plant { ... }
class Basket<T extends Plant> { // Plantμ ꡬν ν΄λμ€λ§ μ§μ νλλ‘ μ ν
private T item;
...
}
interface Plant { ... }
class Flower implements Plant { ... }
class Rose extends Flower implements Plant { ... }
// Flowerλ₯Ό λ¨Όμ μ¨μ€μΌ νλ€.
// Plantλ₯Ό ꡬννκ³ λμμ Flowerλ₯Ό μμν ν΄λμ€λ§ μ§μ νλλ‘ μ ν
class Basket<T extends Flower & Plant> {
private T item;
...
}
π μ λ€λ¦ λ©μλ
ν΄λμ€ λ΄λΆμ νΉμ λ©μλλ§ μ λ€λ¦μΌλ‘ μ μΈν μλ μλ€. μ΄λ₯Ό μ λ€λ¦ λ©μλλΌκ³ νλ€.
- μ λ€λ¦ ν΄λμ€λ ν΄λμ€κ° μΈμ€ν΄μ€νλ λ νμ μ΄ μ ν΄μ§λ€.
- μ λ€λ¦ λ©μλλ λ©μλκ° νΈμΆλ λ νμ μ΄ μ ν΄μ§λ€.
class Basket {
...
static <T> int setPrice(T element) {
...
}
}
ν΄λμ€ νμ 맀κ°λ³μμ λ¬λ¦¬ λ©μλ νμ 맀κ°λ³μλ static λ©μλμμλ μ μΈ κ°λ₯νλ€.
class Basket {
public <T> void print(T item) {
System.out.println(item.length()); // λΆκ°
}
public <T> void getPrint(T item) {
System.out.println(item.equals("Kim coding")); // κ°λ₯
}
}
- νμ μ΄ μ ν΄μ Έμμ§ μκΈ° λλ¬Έμ length()μ κ°μ String ν΄λμ€μ λ©μλλ μ¬μ© λΆκ°λ₯νλ€.
- λͺ¨λ μλ° ν΄λμ€μ μ΅μμ ν΄λμ€μΈ Object ν΄λμ€μ λ©μλλ μ¬μ© κ°λ₯νλ€.