[Java μ¬ν] Generic(μ λ€λ¦)μ ν΅μ¬λ§ μ΄ν΄ν΄λ³΄μ.
μ΄ μ리μ¦λ Springμμ Genericμ μ΄μ©νμ¬ CRUD μΈν°νμ΄μ€λ₯Ό ꡬμ±ν΄λ³΄μ.μ μ΄μ΄μ§λ κΈ μ λλ€.
- Generic(μ λλ¦)μ ν΅μ¬λ§ μ΄ν΄ν΄λ³΄μ.
- Springμμ Genericμ μ΄μ©νμ¬ CRUD μΈν°νμ΄μ€λ₯Ό ꡬμ±ν΄λ³΄μ.
μ΄ κΈμ μ΄λ‘ μ κ΄λ ¨ν κΈμ΄κ³ μ€μ μμ μ΄λ»κ² μ°μ΄λμ§ κΆκΈνμλ€λ©΄ 2λ² λ§ν¬λ₯Ό ν΄λ¦ν΄μ νμΈν΄μ£ΌμκΈ° λ°λλλ€.
μ€λ μμλ³Ό κ²μ λ°λ‘ Generic(μ λλ¦)μΌλ‘ λΆλ¦¬λ κ²μ΄λ€.
μ λλ¦μ μ¬μ©νλ μ΄μ μ λ°©λ²μ λν΄μλ μκ² λλ° μ€μ μμ λ€ ν΄λμ€λ₯Ό μ λλ¦μΌλ‘ μ§μ ν΄μΌ ν μ§ λͺ¨λ₯΄κ² κ±°λ κΆκΈνλ€λ©΄ μ΄λ² μ리μ¦κ° ν° λμμ΄ λμ§ μμκΉ μκ°νλ€.
μμν΄λ³΄μ.
Generic
μ λλ¦μ Java 1.5 λ²μ λΆν° μΆκ°λμμΌλ©° λ μ΄λ° μ΄μΌκΈ°λ μ μ μ μ΄ λκ³ μ λλ¦μ΄ 무μμ΄λ©° μ μ λλ¦μ μ¬μ©ν΄μΌ νλμ§λ₯Ό μμμΌνλ€.
μ λλ¦μ΄λ?
μ½κ² νμ
μ νλΌλ―Έν°λ‘ κ°μ§λ ν΄λμ€μ μΈν°νμ΄μ€μ΄λ©° μ΄λ¦ λ€μ <>
κ° λΆλλ€. λΌκ³ ν΄λμ.
μλ―Έλ‘ μ μΌλ‘λ λ λ€μνκ² μ€λͺ
ν μ μμ§λ§ λ°±λ¬Έμ΄ λΆμ¬μΌκ²¬μ΄λΌ ν λ² λ³΄λ κ²μ΄ λ°±λ²μ μ€λͺ
λ³΄λ€ λ«λ€.
μ λλ¦μ μ₯μ
- μ»΄νμΌ μμ κ°ν νμ 체ν¬λ₯Ό ν μ μλ€.
- Casting μ κ±°νλ€.
μ»΄νμΌ μμ κ°ν νμ 체ν¬λ₯Ό ν μ μλ€.
μλ° μ»΄νμΌλ¬λ μ°λ¦¬κ° μ½λλ₯Ό μμ±νλ μμ μ λ°μν μ μλ λ¬Έμ μ μ μ κΈ°ν΄μ€λ€.
μλ₯Ό λ€μ΄μ
LinkedList<String> list = new LinkedList<>()
λΌλ κ΅¬λ¬Έμ΄ μμΌλ©΄ μ°λ¦¬λ λΉμ°ν
list
λΌλ λ³μμλ String νμ
λ§ λ€μ΄κ° μ μλ€λ κ²μ μ μ μλ€.
μλ? λ°λ‘ νμ νλΌλ―Έν°κ° StringμΌλ‘ μ§μ λμ΄ μκΈ° λλ¬Έμ΄λ€.
νμ§λ§ μ λλ¦ νμ νλΌλ―Έν°μ λ²μ΄λ νμ μ μ 곡νλ€λ©΄ μ»΄νμΌ μμ μ λ€μκ³Ό κ°μ μ€λ₯λ₯Ό λ΄λΏλλ€.
μ΄λ° μμΌλ‘ μ»΄νμΌ μμ μ νμ 체ν¬λ₯Ό κ°μ ν ν μ μκ³ μ΄ λ§μ μμ°μ€λ½κ² μ½λμ μ νμ±μ΄ λμμ§λ€λ μ₯μ μ΄ λλ€.
Castingμ΄ μ κ±°λλ€.
μΊμ€ν μ μ°λ¦¬κ° ν λ³νμ μν λ°©λ²μ€ νλλ‘ μκ³ μλ€.
μλ₯Ό λ€μ΄μ Box
λΌλ ν΄λμ€μ Stringμ set ν΄μ£Όκ³ get λ©μλλ₯Ό ν΅ν΄μ λ€μ΄κ° Stringμ μΆλ ₯νλ λ‘μ§μ ꡬννλ€κ³ νμ λ μ°λ¦¬λ
class Box {
private String data;
void setData(String data) {
this.data = data;
}
String getData() {
return data;
}
}
μ΄λ κ² κ΅¬νν μ μλ€.
νμ§λ§ Box
λΌλ ν΄λμ€μ Integerν νμ
μ λ³μκ° λ€μ΄κ° μλ μκ³ , Double νμ
μ λ³μκ° λ€μ΄κ° μλ μλ€λ©΄ μ°λ¦¬λ μ΄λ€ νμ
μ΄ μ¬μ§ λͺ¨λ₯΄λ Object
νμ
μΌλ‘ λ°μμ Object νμ
μΌλ‘ λ°νμν€λ©΄ μ¬μ©ν λμ νλ³ν κ³Όμ μ΄ νμμ μΌλ‘ μ΄λ£¨μ΄μ ΈμΌ νλ€.
νμ§λ§ μ¬κΈ°μ μ λλ¦μ μ¬μ©νλ€λ©΄
보λ κ²κ³Ό κ°μ΄ νλ³νμ λΆνμν μ€λ²ν€λλ₯Ό μ€μΌ μ μμ΄ μ 체 μ±λ₯μ μ‘°κΈμ΄λλ§ μμΉμν¬ μ μκ² λλ€.
μ΄λ κ² μ λλ¦μ μ¬μ©νλ€λ©΄ μ‘°κΈ λ μ°μν μ½λλ₯Ό μμ±ν μ μκ² λλ€.
κ·ΈλΌ κΈ°λ³Έμ λν΄μλ μμκ³ μ΄μ λͺ κ°μ§μ λμ± μ°μν λ°©λ²μ μ λλ¦μ μμ보μ.
λ κ°μ μ λ€λ¦ νμ μ μ¬μ©νκΈ°
μ λ€λ¦μμλ λ κ° μ΄μμ νμ μ λν΄μ λ©ν° νμ νλΌλ―Έν°λ₯Ό μ¬μ©ν μ μλ€.
μ΄κ²λ λ§μ΄ μ΄λ ΅μ§ μ€μ λ‘ μ¬λ¬λΆλ€μ΄ μ¬μ©νκ³ μλ κ² μΌ μλ μλ€.
HashMap<String, Integer> map = new HashMap<>();
ν΄μλ§΅μ μ΄μ©ν΄μ Key: value μ κ°μ²΄λ₯Ό λ§λ€κΈ° μν΄μ μ¬μ©νλ λ°λ‘ μ΄ κ΅¬μ‘°κ° λ©ν° νμ νλΌλ―Έν°μ λνμ μΈ μ μ΄λ€.
μ¬κΈ°μ μμλλ©΄ μΈμ κ° μΈλͺ¨κ° μλ μ§μμ΄ μλ€λ©΄ μλ° 6λ²μ μ΄μ λΆν°λ λ©ν° νμ μ μΌμΌμ΄ ꡬ체μ νμ μ μ§μ ν΄μ€¬μλ€.
λ°λ‘ μ΄λ κ²
HashMap<String, Integer> map = new HashMap<String, Integer>();
νμ§λ§ μ°λ¦¬κ° λ무λλ μ«μ΄νλ μ½λμ μ€λ³΅μ΄ λ°μνκ³ μ½λκ° λλ €μμ§ μ μλ€λ μ΄μ λ‘ μλ° 7λΆν°λ λ€μ΄μλͺ¬λ μ°μ°μλ₯Ό μ΄μ©ν΄μ νμ
μ μλμΌλ‘ μ μΆν μ μκΈ° λλ¬Έμ μ°λ¦¬λ νμ¬μ μ΄ HashMap<String, Integer> map = new HashMap<>();
μ°μν μ½λλ₯Ό μ¬μ©ν μ μλ κ²μ΄λ€.
μ λλ¦ λ©μλ
μ λλ¦ λ©μλλ λ§€κ° νμ κ³Ό λ¦¬ν΄ νμ μΌλ‘ νμ νλΌλ―Έν°λ₯Ό κ°λ λ©μλμ΄λ€.
λ³΄ν΅ ν΄λμ€λ₯Ό μ μΈνμ§ μκ³ μΈ μ μλ static
λ©μλμ μμ£Ό μ°μ΄κ³€ νλλ° κ·Έλ κ·Έλ΄ κ²μ΄,
ν΄λμ€λ₯Ό μ μΈνμ§ μμΌλ©΄ μ λ€λ¦μ μ¬μ©ν ν΄λΉ ν΄λμ€κ° μ΄λ€ ν΄λμ€λ₯Ό λ°μ μ μλμ§ μ§μ μ§μ ν μ μκΈ° λλ¬Έμ λ©μλ λ¨μμμ μ»΄νμΌ μ²΄ν¬λ₯Ό ν΄μ€ μ μκ² νκΈ° μν΄ μ¬μ©λλ€.
public class Pair<K, V> {
private K key;
private V value;
public Pair(K key, V value) {
this.key = key;
this.value = value;
}
public void setKey(K key) { this.key = key; }
public void setValue(V value) { this.value = value; }
public K getKey() { return key; }
public V getValue() { return value; }
}
public class Util {
public static <K, V> boolean compare(Pair<K, V> p1, Pair<K, V> p2) {
return p1.getKey().equals(p2.getKey()) &&
p1.getValue().equals(p2.getValue());
}
}
ν΄λΉ μμ€μ½λλ λΉ λ₯Έ μ€λͺ μ μν΄ λ°±μ€μ κ°λ°μλμ medium λΈλ‘κ·Έμμ κ°μ Έμμ΅λλ€. μΆμ²
λ°±μ€μ κ°λ°μλμ΄ μμ±νμ μμ€μ½λλ₯Ό 보μλ©΄ Util
ν΄λμ€μμ staticμΌλ‘ compareμ΄λΌλ λ©μλλ₯Ό μ¬μ©νκΈ° μν΄μ λ°ν νμ
μΌλ‘ <K, V>
μ μ λ€λ¦λ§ μ¬μ©ν μ μλλ‘ νμλ€.
λ³΄ν΅ μ΄λ° κ²½μ°μ μ¬μ© λ°©λ²μ
<μ λ€λ¦ νμ
νλΌλ―Έν°> λ°ν νμ
λ©μλ μ΄λ¦ (λ§€κ°λ³μ) {...}
μ ννλ‘ μ¬μ©νκ³€ νλ€.
μ΄λ κ² μ€λμ κΈ°λ³Έμ μΈ μ λ€λ¦μ μ¬μ©νλ λ°©λ²μ λν΄μ μμ보μλ€.
λ€μμκ°μλ μ‘°κΈ λ κΉκ² λ€μ΄κ°μ
?
ννμ μμΌλ μΉ΄λμ λν΄μλ μμλ³΄κ³ μ‘°κΈ μ΄λ‘ μ μΈ μ¬ν λ΄μ©μ ν λ² λ€λ€λ³΄μ.
μ€λμ μΆ©λΆνλ€.