์ ๋ค๋ฆญ์ ๊ณต๋ถํ๋ฉด์ ํ ๊ฐ์ง ์๋ฌธ์ด ์๊ฒผ๋ค.
"ํ์
์์ ์ฑ์ ๋ณด์ฅํ๋ค"๋ ๋ง์ ๊ณผ์ฐ ๋ฌด์์ ์๋ฏธํ๋ ๊ฑธ๊น?
์ฒ์์๋ ์ด ๋ง์ด ์ข ๋ง์ฐํ๊ฒ ๋ค๋ ธ๊ณ ๊ทธ ์๋ฌธ์ ๊ผฌ๋ฆฌ์ ๊ผฌ๋ฆฌ๋ฅผ ๋ฌผ๊ณ ์ด์ด์ ธ
๋ฐํ์์๋ฌ ์ ๋ํด ๊ณต๋ถํ๊ฒ ๋๋ ๊ณ๊ธฐ๊ฐ ๋์๋ค.
//์ ๋ค๋ฆญ ํด๋์ค
public class GenericBox<T> {
private T item;
public GenericBox(T item){
this.item = item;
}
public T getItem() {
return this.item;
}
}
//๋ฉ์ธ ํด๋์ค
public class Main {
public static void main(String[] args) {
//์ ๋ค๋ฆญ์ ์ฐธ์กฐํ(Reference Type)๋ง ํ์ฉํ๋ค.(๊ธฐ๋ณธํ Primitive Type์ ํ์ฉํ์ง ์์)
//๊ธฐ๋ณธํ์ ์ฌ์ฉํ๋ ค๋ฉด ๋์๋๋ ๋ํผ ํด๋์ค๋ฅผ ํ์
์ธ์๋ก ๋ฃ์ด์ผ ํ๋ค.
//(์: int โ Integer, double โ Double ๋ฑ / String์ ์ ์ด์ ์ฐธ์กฐํ์ด๋ฏ๋ก ๊ทธ๋๋ก ์ฌ์ฉ ๊ฐ๋ฅ)
GenericBox<String> strGBox = new GenericBox<>("item1");
GenericBox<Integer> intGBox = new GenericBox<>(100);
GenericBox<Double> doubleGBox = new GenericBox<>(1.5);
//ํ์
์์ ์ฑ ๋ณด์ฅ
//์ ๋ค๋ฆญ ์ธ์คํด์ค๋ ๋ค์ด์บ์คํ
์ ์๋์ผ๋ก ์งํํด์ค๋ค.
String str1 = strGBox.getItem();
System.out.println("str1 = " + str1);
Object num1 = intGBox.getItem();
System.out.println("num1 = " + num1);
}
์ฌ๊ธฐ๊น์ง๋ ์ผ๋ฐ์ ์ธ ์ ๋ค๋ฆญ์ ์ฌ์ฉ๋ฒ์ ์ค๋ช
ํ๋ ์์์ด๋ค.
๊ทธ๋ฐ๋ฐ ์๋์ฒ๋ผ ์ฝ๋๋ฅผ ์์ฑํ๋ค๋ฉด ์ด๋จ๊น? ๋ด ์๋ฌธ์ ์ ์ด ๋ถ๋ถ์์ ์์ํ๋ค.
Integer num2 = strGBox.getItem(); //์ปดํ์ผ ์๋ฌ item์ String ํ์
๋ฌผ๋ก ํด๋น ์ํฉ์ IDE ๊ฐ ์ค๋ฅ๋ฅผ ์บ์นํด์ฃผ๊ณ ์คํ์ ์ปดํ์ผ ์๋ฌ๋ฅผ ๋ฐ์์ํจ๋ค.
ํ์ง๋ง ํ์
๋ถ์ผ์น ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋๊ฑด ๊ธฐ์กด์ ํด๋์ค์ ๋์ผํ๋ฐ ์ ๋ค๋ฆญ์ ์ฌ์ฉํ๋ฉด์ ์ป๋๋ค๋ ํ์
์์ ์ฑ ๋ณด์ฅ์ด๋ผ๋ ๋ง์ด ๋ฌด์จ ์๋ฏธ์ธ์ง ๊ถ๊ธํ๋ค.
์ด๋ฐ ์๋ฌธ์ ๊ฐ๊ณ ๊ฒ์์ ํ๋ค ๋ณด๋ 'ํ์
์์ ์ฑ ๋ณด์ฅ' ์ด๋ผ๋ ๋ง์ด ์ปดํ์ผ ํ์์ ์๋ฌ๋ฅผ ์ก์์ฃผ๋ ๊ฒ์ด๋ผ๋ ์ฌ์ค์ ์๊ฒ ๋์๋ค.
์ปดํ์ผ ํ์์ ์๋ฌ๋ฅผ ์ก์์ค์ ๋ฐํ์์๋ฌ๋ฅผ ๋ฐฉ์งํ ์ ์๋ค๋ ๊ฒ ์ ๊ทธ๋ ๊ฒ ์ค์ํ๊ฑธ๊น?
"๋ฐํ์์๋ฌ? ๊ทธ๋ฅ ํ๋ก๊ทธ๋จ์ด ๊ฐ์ ์ข
๋ฃ ๋๋๊ฑฐ ์๋๊ฐ...?"
๋ฐํ์์๋ฌ์ ์ด๋ก ์ธํด ๋ฐ์ํ๋ ํ๋ก๊ทธ๋จ์ ๊ฐ์ ์ข ๋ฃ๊ฐ ์ ๋ฌด์์ด์ง์ ๋ํด ์ฐพ์๋ณด์๋ค.
- ์ํ ์ฑ์์ ์ก๊ธ์ ๋๋ฅธ ์๊ฐ ๋ฐํ์ ์๋ฌ ๋ฐ์
- ์ฑ ๊ฐ์ ์ข ๋ฃ
- ์ฌ์ฉ์๋ ๋์ด ์ก๊ธ๋๋์ง ์๋์ง ๋ชจ๋ฆ
์ํฉ ์์
unchecked null: null ์ํ๋ฅผ ์ ์ฉํด ์ธ์ฆ ์ฐํ๋ ์ ๊ทผ ์ ์ด ์ฐํ ์๋๊ฐ ๊ฐ๋ฅํ๋ค.
buffer overrun: ๋ฒํผ ๋ฒ์๋ฅผ ๋์ด์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ฎ์ด์ฐ๋ฉฐ ๊ณก๊ฒฉ์๊ฐ ์์์ ์ฝ๋๋ฅผ ์ฝ์ ํ๊ฑฐ๋ ์คํ์ํฌ ์ ์๋ค.
์ง๊ธ๊น์ง์ ์์
์ด ๊ฐ๋ฐ ๋จ๊ณ์ ๊ทธ์ณค๊ธฐ์ ๋๋ ๋ฐํ์ ์๋ฌ๋ฅผ ๋จ์ํ ๊ฐ๋ฐ ์ค ๋ง์ฃผ์น๋ ๊ฐ๋ฒผ์ด ์์ธ์ฏค์ผ๋ก๋ง ์ฌ๊ฒผ๋ค.
ํ์ง๋ง ์ ๋ค๋ฆญ์ ํ์
์์ ์ฑ์ ๋ํด ๊ณ ๋ฏผํ๋ฉด์ '์ ์ปดํ์ผ ํ์์ ์๋ฌ๋ฅผ ์ก๋ ๊ฒ ์ค์ํ ๊น?' ๋ผ๋ ์ง๋ฌธ์ ์ค์ค๋ก์๊ฒ ๋์ง๊ฒ ๋์๊ณ ๊ทธ ๊ณผ์ ์์ ๋ฐํ์ ์๋ฌ๊ฐ ์ฌ์ฉ์์๊ฒ ์ง์ ์ ์ธ ํผํด๋ฅผ ์ค ์ ์๋ค๋ ์ฌ์ค์ ๊นจ๋ซ๊ฒ ๋์๋ค.
๊ฒฐ๊ตญ ํ์ ์์ ์ฑ ๋ณด์ฅ์ ํตํด ๋ฐํ์ ์๋ฌ๋ฅผ ๋ฐฉ์งํ๋ค๋ ๊ฒ์ ์ฌ์ฉ์๊ฐ ์ ๋ขฐํ ์ ์๋ ์์ ์ ์ธ ์คํํ๊ฒฝ์ ๋ง๋ ๋ค๋ ์๋ฏธ์๋ค.
์ข์ ํ๋ก๊ทธ๋จ์ด๋ ๋จ์ํ ๊ตฌ๋์ ๋์ด ์ฌ์ฉ์๊ฐ ๋ถํธํจ ์์ด ์์ฌํ๊ณ ์ธ ์ ์๋ ๊ฒ์ด์ด์ผ ํ๋ค.
๊ฒฐ๋ก : ์ ๋ค๋ฆญ ์ต๊ณ !
๊ทธ๋ผ ํ์ ์์ ์ฑ์ด ์์ ๋ ๋ฐํ์ ์์ธ๊ฐ ๋ฐ์ํ๋ ์์๋ ๋ญ๊ฐ์?