์ด ์๋ฆฌ์ฆ๋ 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>
์ ์ ๋ค๋ฆญ๋ง ์ฌ์ฉํ ์ ์๋๋ก ํ์๋ค.
๋ณดํต ์ด๋ฐ ๊ฒฝ์ฐ์ ์ฌ์ฉ ๋ฐฉ๋ฒ์
<์ ๋ค๋ฆญ ํ์
ํ๋ผ๋ฏธํฐ> ๋ฐํ ํ์
๋ฉ์๋ ์ด๋ฆ (๋งค๊ฐ๋ณ์) {...}
์ ํํ๋ก ์ฌ์ฉํ๊ณค ํ๋ค.
์ด๋ ๊ฒ ์ค๋์ ๊ธฐ๋ณธ์ ์ธ ์ ๋ค๋ฆญ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ์์๋ณด์๋ค.
๋ค์์๊ฐ์๋ ์กฐ๊ธ ๋ ๊น๊ฒ ๋ค์ด๊ฐ์
?
ํํ์ ์์ผ๋ ์นด๋์ ๋ํด์๋ ์์๋ณด๊ณ ์กฐ๊ธ ์ด๋ก ์ ์ธ ์ฌํ ๋ด์ฉ์ ํ ๋ฒ ๋ค๋ค๋ณด์.
์ค๋์ ์ถฉ๋ถํ๋ค.
๋๊ธ