
1. ์ ๋ค๋ฆญ์ ํ์๋ก ํ๊ฒ ๋ ๊ณ๊ธฐ
- ์ฝ๋ ์ค๋ณต์ ํด๊ฒฐ๊ณผ ์ฝ๋ ์์ ์ฑ์ ๋ชจ๋ ํด๊ฒฐํ ์ ์์๋ ๋คํ์ฑ๊ณผ ๋ค์ด์บ์คํ .
๋ฐ์ดํฐ ํ์ ์ ๋ฐ๋ผ ํด๋์ค๋ฅผ ๋ณ๋๋ก set๋ฉ์๋์ get๋ฉ์๋๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ดํ๊ณ ๊บผ๋ด๋ ๊ฒ์ด ๋ฒ๊ฑฐ๋กญ๋ค.
๊ทธ๋์ Object๋ ๋ชจ๋ ํ์ ์ ๋ถ๋ชจ์ด๋ฏ๋ก Object๋ฅผ ๋ถ๋ชจํด๋์ค๋ก ํ์ฌ set๊ณผ get ๋ฉ์๋๋ฅผ ์์ฑํ์ฌ ๋คํ์ฑ์ ์ฌ์ฉํด์ ๋ฒ๊ฑฐ๋ก์์ ํด๊ฒฐ์ ์๋ํ์๋ค.
Main ํด๋์ค์์ ๋ค์ด์บ์คํ ์ ํ์๋ค.
Object integerBox = new ObjectBox();
integerBox.set(10);
Integer integer = (Integer) integerBox.get(); //Object -> Integer ์บ์คํ
System.out.println("integer = "+ integer);
๋ฌธ์ ๋ integerBox.set ๋ฉ์๋๋ ๋ชจ๋ ํ์ ์ธ ๋ถ๋ชจ์ธ Object๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฐ๊ธฐ ๋๋ฌธ์ ์ธ์์ ์ด๋ค ๋ฐ์ด๋ ์ ๋ ฅ๋ฐ์ ์ ์๋ค.
๋ฐ๋ผ์ integerBox.set("๋ฌธ์100");์ผ๋ก ๋ฌธ์์ด์ ์ ๋ ฅํด๋ ์๋ฐ ์ธ์ด ์ ์ฅ์์๋ ์๋ฌด๋ฐ ๋ฌธ์ ๊ฐ ๋์ง ์๋๋ค.
ํ์ง๋ง ์๋ชป๋ ํ์ ์ ๊ฐ์ ์ ๋ฌํ๋ฉด ๊ฐ์ ๊บผ๋ผ ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
Integer result = (Integer) integerBox.get(); //1
Integer result = (Integer) "๋ฌธ์100"; //2
Integer result = (Integer) "๋ฌธ์100"; //3,์์ธ ๋ฐ์ String์ Integer๋ก ์บ์คํ
ํ ์ ์๋ค.
์ซ์๊ฐ ๋ค์ด๊ฐ ์๋ ๊ฒ์ ์์ํ ๋ฐ์ค์๋ ๋ฌธ์์ด์ด ๋ค์ด๊ฐ ์์๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก ๋ค์ด ์บ์คํ ์์ String์ Integer๋ก ์บ์คํ ํ ์ ์๋ค๋ ์์ธ๊ฐ ๋ฐ์ํ๊ณ ํ๋ก๊ทธ๋จ์ด ์ข ๋ฃ๋๋ค.
1. ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ดํ๊ณ ๋ฝ์๋ด๋ set๋ฉ์๋์ get๋ฉ์๋ ๊ธฐ๋ฅ์ ๋ฐ์ดํฐ ํ์ ๋ณ๋ก ํด๋์ค๋ฅผ ๋ณ๋๋ก ๋ง๋๋๊ฒ ๋ฒ๊ฑฐ๋กญ๋ค (๋ฌธ์ ์ ๋ฐ์)
2. ๋ฒ๊ฑฐ๋ก์์ ํด๊ฒฐํ๊ณ ์ ๋คํ์ฑ์ ํ์ฉํ์ฌ ์ฝ๋์ ์ค๋ณต์ ์ ๊ฑฐํ๋ ๊ฒ์ ์๋ํ์๋ค
- Object ๋ถ๋ชจํด๋์ค๋ฅผ ์์ฑํ๊ณ Mainํด๋์ค์์ ๊ฐ ์ ํ์ ๋ฐ์ดํฐ๋ก ๋ค์ด์บ์คํ ํ์ฌ์.
3. set()์ ๋งค๊ฐ๋ณ์๋ Object์ด๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ์ ํ์ ๋ฐ์ดํฐ ํ์ ์ด ๋ฌธ์ ์์ด ๋ค์ด๊ฐ๋ค.
(๋ฒ๊ฑฐ๋ก์์ ํด๊ฒฐํ์์ง๋ง ๋๋ค๋ฅธ ๋ฌธ์ ์ ๋ฐ์)
4. ์๋ํ ๋ฐ์ดํฐ ํ์ ์ผ๋ก ๋ค์ด ์บ์คํ ํ ๋, ๋ค๋ฅธ ๋ฐ์ดํฐ ํ์ ์ด ๋ค์ด๊ฐ์๋ ๊ฒ์ผ๋ก ์บ์คํ ์ด ๋ถ๊ฐํ์ฌ ์์ธ๊ฐ ๋ฐ์ํ๋ค.
๊ทธ๋์ ์ฐ๋ฆฌ๋ ์ฝ๋ ์ฌ์ฌ์ฉ๊ณผ ํ์ ์์ ์ฑ์ด๋ผ๋ ๋ ๋ง๋ฆฌ ํ ๋ผ๋ฅผ ํ ๋ฒ์ ์ก์ ์ ์๋ ์ ๋ค๋ฆญ์ ์ฌ์ฉํ๋ค.
2. ์ ๋ค๋ฆญ - ์ฝ๋ ์ฌ์ฌ์ฉ๊ณผ ํ์ ์์ ์ฑ์ ๋ชจ๋ ์ก์๋ณด์!
package generic.ex1;
public class GenericBox<T> {
private T value;
public void set(T value) {
this.value = value
}
public T get() {
return value;
}
}
`<>`๋ฅผ ์ฌ์ฉํ๋ ํด๋์ค๋ฅผ ์ ๋ค๋ฆญ ํด๋์ค๋ผ๊ณ ํ๋ฉฐ,
์ด ๊ธฐํธ( `<>` )๋ ์ผ๋ฐ์ ์ผ๋ก ๋ค์ด์๋ชฌ๋๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์ ๋ค๋ฆญ ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ฉด `Integer`๋ `String` ๊ฐ์ ํน์ ํ์ ์ ๋ฏธ๋ฆฌ ์ ํ์ง ์์๋ ๋๋ค.
ํด๋์ค๋ช ์ค๋ฅธ์ชฝ์ `<T>`์ ๊ฐ์ด ์ ์ธํ๋ฉด ํด๋น ํด๋์ค๋ ์ ๋ค๋ฆญ ํด๋์ค๊ฐ ๋๋ฉฐ,
์ฌ๊ธฐ์ `T`๋ ํ์ ๋งค๊ฐ๋ณ์๋ผ๊ณ ํ๋ค.
ํ์ ๋งค๊ฐ๋ณ์ `T`๋ ๋์ค์ ์ค์ ๋ก ์ฌ์ฉํ ๋ `Integer`, `String` ๋ฑ์ผ๋ก ๋์ฒด๋ ์ ์๋ค.
ํด๋์ค ๋ด๋ถ์์ ํ์ ์ด ํ์ํ ๊ณณ์ `T`๋ฅผ ์ฌ์ฉํด ์๋ฅผ ๋ค์ด `T value`์ ๊ฐ์ด ์ ์ธํ๋ฉด,
๋์ค์ ์ง์ ๋ ํ์ ์ ๋ฐ๋ผ ์ฒ๋ฆฌ๋๋ค.
package generic.ex1;
public class BoxMain3 {
public static void main(String[] args) {
GenericBox<Integer> integerBox = new GenericBox<Integer>(); // ์์ฑ์์ ์ T์ ํ์
๊ฒฐ์
integerBox.set(10);
//integerBox.set("๋ฌธ์100"); // Integer ํ์
๋ง ํ์ฉ, ์ปดํ์ผ ์ค๋ฅ
Integer integer = integerBox.get(); //Integer ํ์
๋ณํ (์บ์คํ
X)
System.out.println("integer = " + integer);
//์ํ๋ ๋ชจ๋ ํ์
์ฌ์ฉ ๊ฐ๋ฅ
GenericBox<Double> doubleBox = new GenericBox<Double>(); doubleBox.set(10.5);
Double doubleValue = doubleBox.get(); System.out.println("doubleValue = " + doubleValue);
//ํ์
์ถ๋ก : ์์ฑํ๋ ์ ๋ค๋ฆญ ํ์
์๋ต ๊ฐ๋ฅ
GenericBox<Integer> integerBox2 = new GenericBox<>();
}
}
์คํ ๊ฒฐ๊ณผ
integer = 10
doubleValue = 10.5
์์ฑ ์์ ์ ์ํ๋ ํ์
์ง์
์ ๋ค๋ฆญ ํด๋์ค๋ ๋ค์๊ณผ ์ ์ํ๋ค. `<>` (๋ค์ด์๋ชฌ๋ ๊ธฐํธ)์์ ํ์
๋งค๊ฐ๋ณ์๋ฅผ ์ ์ํ๋ฉด ๋๋ค.
class GenericBox<T>
์ ๋ค๋ฆญ ํด๋์ค๋ ์์ฑํ๋ ์์ ์ `<>` ์ฌ์ด์ ์ํ๋ ํ์ ์ ์ง์ ํ๋ค.
new GenericBox<Integer>()
T์ Integer๋ฅผ ์ ์ฉํ GenericBox ํด๋์ค
public class GenericBox<Integer> {
private Integer value;
public void set(Integer value) {
this.value = value;
}
public Integer get() {
return value;
} }
T` ๊ฐ ๋ชจ๋ `Integer` ๋ก ๋ณํ๋ค. ๋ฐ๋ผ์ `Integer` ํ์ ์ ์ ๋ ฅํ๊ณ ์กฐํํ ์ ์๋ค.
์ด์ `set(Integer value)` ์ด๋ฏ๋ก ์ด ๋ฉ์๋์๋ `Integer` ์ซ์๋ง ๋ด์ ์ ์๋ค.
`get()` ์ ๊ฒฝ์ฐ์๋ `Integer` ๋ฅผ ๋ฐํํ๊ธฐ ๋๋ฌธ์ ํ์ ์บ์คํ ์์ด ์ซ์ ํ์ ์ผ๋ก ์กฐํํ ์ ์๋ค.
Integer integer = integerBox.get(); // Integer ํ์
๋ฐํ (์บ์คํ
X)
ํ์ ์ถ๋ก
GenericBox<Integer> integerBox = new GenericBox<Integer>() // ํ์
์ง์ ์
๋ ฅ
GenericBox<Integer> integerBox2 = new GenericBox<>() // ํ์
์ถ๋ก
์ฒซ ๋ฒ์งธ ์ค์ ์ฝ๋๋ฅผ ๋ณด๋ฉด, ๋ณ์๋ฅผ ์ ์ธํ ๋์ ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ <Integer>๊ฐ ๋ ๋ฒ ๋ฑ์ฅํ๋ค.
์๋ฐ๋ ๋ณ์ ์ ์ธ ์ ์ฌ์ฉ๋ <Integer>๋ฅผ ๋ณด๊ณ , ๊ฐ์ฒด ์์ฑ ์ ํ์ํ ํ์ ์ ๋ณด๋ฅผ ์ป์ ์ ์๋ค.
๋ฐ๋ผ์, ๋ ๋ฒ์งธ ์ค์ ์ฝ๋์ฒ๋ผ new GenericBox<>()์ ๊ฐ์ด ํ์ ์ ๋ณด๋ฅผ ์๋ตํ ์ ์๋ค.
์ด๋ฅผ ํ์ ์ถ๋ก ์ด๋ผ ํ๋ฉฐ,
์๋ฐ๊ฐ ์ค์ค๋ก ํ์ ์ ๋ณด๋ฅผ ์ ์ถํ์ฌ ๊ฐ๋ฐ์๊ฐ ํ์ ์ ๋ณด๋ฅผ ์๋ตํ ์ ์๋๋ก ํด์ค๋ค.
๋ค๋ง, ํ์ ์ถ๋ก ์ ๋ชจ๋ ์ํฉ์์ ๊ฐ๋ฅํ ๊ฒ์ด ์๋๋ค.
์๋ฐ ์ปดํ์ผ๋ฌ๊ฐ ํ์ ์ ์ถ๋ก ํ ์ ์๋ ๊ฒฝ์ฐ์๋ง ๊ฐ๋ฅํ๋ฉฐ,
์ด๋ฅผ ์ํด ์ฃผ๋ณ ์ฝ๋์ ์ฝ์ ์ ์๋ ํ์ ์ ๋ณด๊ฐ ์กด์ฌํด์ผ ํ๋ค.
์ฝ๊ฒ ๋งํด, ํ์ ์ ๋ณด๊ฐ ๋ช ํํ๊ฒ ๋๋ฌ๋ ์ํฉ์์๋ง ์ถ๋ก ์ด ๊ฐ๋ฅํ๋ค.
์ ๋ฆฌ
์ ๋ค๋ฆญ์ ์ฌ์ฉํ ๋๋ถ์ ์ฝ๋ ์ฌ์ฌ์ฉ๊ณผ ํ์ ์์ ์ฑ์ด๋ผ๋ ๋ ๋ง๋ฆฌ ํ ๋ผ๋ฅผ ๋ชจ๋ ์ก์ ์ ์์๋ค.