๐ฏ ์์ดํ
26. ๋ก ํ์
์ ์ฌ์ฉํ์ง ๋ง๋ผ
ํด๋์ค์ ์ธํฐํ์ด์ค ์ ์ธ์ ํ์
๋งค๊ฐ๋ณ์๊ฐ ์ฐ์ด๋ฉด, ์ด๋ฅผ ์ ๋ค๋ฆญ ํด๋์ค ํน์ ์ ๋ค๋ฆญ ์ธํฐํ์ด์ค๋ผ ํ๋ค.
- ์ ๋ค๋ฆญ ํด๋์ค
public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable {
...
}
- ์ ๋ค๋ฆญ ์ธํฐํ์ด์ค
public interface List<E> extends Collection<E> { ... }
์ ๋ค๋ฆญ ํด๋์ค์ ์ ๋ค๋ฆญ ์ธํฐํ์ด์ค๋ฅผ ํตํ์ด ์ ๋ค๋ฆญ ํ์
(generic type)์ด๋ผ ํ๋ค.
๊ฐ๊ฐ์ ์ ๋ค๋ฆญ ํ์
์ ์ผ๋ จ์ ๋งค๊ฐ๋ณ์ํ ํ์
(parameterized type)์ ์ ์ํ๋ค.
์ ๋ค๋ฆญ ํ์
์ ํ๋ ์ ์ํ๋ฉด ๊ทธ์ ๋ธ๋ฆฐ ๋ก ํ์
(raw type)๋ ํจ๊ป ์ ์๋๋ค.
๋ก ํ์
์ด๋ ์ ๋ค๋ฆญ ํ์
์์ ํ์
๋งค๊ฐ๋ณ์๋ฅผ ์ ํ ์ฌ์ฉํ์ง ์์ ๋๋ฅผ ๋งํ๋ค.
- ๋ก ํ์
public class Item26 {
public static void main(String[] args) {
// ์ ๋ค๋ฆญ ํ์
๋ฆฌ์คํธ
List<String> genericTypeList = new ArrayList<>();
// ๋ก ํ์
๋ฆฌ์คํธ
List rawTypeList = new ArrayList();
}
}
- ๋ก ํ์
์ ๋ฌธ์ ์
public class Item26 {
public static void main(String[] args) {
// ๋ก ํ์
๋ฆฌ์คํธ
List rawTypeList = new ArrayList();
rawTypeList.add("raw type list");
rawTypeList.add("quedevel");
// ์ค์๋ก string ๋ฆฌ์คํธ์ int๋ฅผ ๋ฃ๋๋ค.
// ์ฌ๊ธฐ์ int๋ฅผ ๊บผ๋ด๊ธฐ์ ์ ์ค๋ฅ๋ฅผ ์ ์ ์๋ค.
rawTypeList.add(1);
rawTypeList.add("innotree");
// ํ์ง๋ง ์คํํ๊ฒ ๋๋ค๋ฉด
rawTypeList.forEach(e -> {
String temp = (String) e; // java.lang.ClassCastException !! ๋ฐ์
System.out.println(temp);
});
}
}
๋ค๋ฅธ ํ์
์ ๊ฐ์ ๋ฃ์ด์ค๋ ์ปดํ์ผ์์๋ ๋ฐ๊ฒฌ๋์ง ์๋ค๊ฐ ๋ฐํ์์์ผ ์์์ฑ ์ ์๋ค. ์ด์์ ์ผ๋ก๋ ์ปดํ์ผํ ๋ ๋ฐ๊ฒฌํ๋ ๊ฒ์ด ์ข๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก, ๋ก ํ์
์ ์ฐ๋ฉด ์ ๋ค๋ฆญ์ด ์๊ฒจ์ฃผ๋ ์์ ์ฑ๊ณผ ํํ๋ ฅ์ ๋ชจ๋ ์๊ฒ ๋๋ค.
๊ทธ๋ผ์๋ ๋ก ํ์
์ ์ฐ์ง ๋ง๋ผ๋ ๊ท์น์๋ ์์ํ ์์ธ๊ฐ ๋ช ๊ฐ ์๋ค.
class ๋ฆฌํฐ๋ด์๋ ๋ก ํ์ ์ ์จ์ผ ํ๋ค.
ex) List.class, String[].class, int.class๋ ํ์ฉํ๊ณ List.class์ List<?>.class๋ ํ์ฉํ์ง ์๋๋ค. instanceof ์ฐ์ฐ์์ ๊ด๋ จ์ด ์๋ค. ๋ฐํ์์๋ ์ ๋ค๋ฆญ ํ์ ์ ๋ณด๊ฐ ์ง์์ง๋ฏ๋ก instanceof ์ฐ์ฐ์๋ ๋นํ์ ์ ์์ผ๋์นด๋ ํ์ ์ด์ธ์ ๋งค๊ฐ๋ณ์ํ ํ์ ์๋ ์ ์ฉํ ์ ์๋ค.
if(o instanceof Set){
Set<?> s = (Set<?>) o;
}
o์ ํ์ ์ด Set์์ ํ์ธํ ๋ค์ ์์ผ๋์นด๋ ํ์ ์ธ Set<?>๋ก ํ๋ณํํด์ผ ํ๋ค.
์ด๋ ๊ฒ์ฌ ํ๋ณํ(checked cast)์ด๋ฏ๋ก ์ปดํ์ผ ๊ฒฝ๊ณ ๊ฐ ๋จ์ง ์๋๋ค.
์ฐธ๊ณ ์๋ฃ
Joshua Bloch, ใEffective Java 3/Eใ, ๊ฐ์๋งต์ ์ฎ๊น, ํ๋ก๊ทธ๋๋ฐ์ธ์ฌ์ดํธ(2018)
http://www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR&mallGb=KOR&barcode=9788966262281&orderClick=LEa&Kc=