컴파일 때 타입을 체크하는데에 한계가 있었음 이를 해결해주는 것이 지네릭스
object[] obj; // 모든 종류 객체저장가능
ArrayList<Tv> tvList = new ArrayList<Tv>();
tvList.add(new Tv()); // OK
tvList.add(new Audio()); // 컴파일 에러, Tv외에 다른 타입은 저장 불가
// 형변환 안해도 됨
import java.util.ArrayList;
public class GenericsTest {
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add(10);
list.add(20);
list.add("30"); // String 추가
Integer i = (Integer)list.get(2);
System.out.println(list);
}
}
// ClassCastException - 형변환 에러 발생 (실행시 발생하는 에러)
// 컴파일러는 Object안에 무엇이 들어있는지까지 확인할 수 없음
// 이러한 실행시 발생하는 에러를 컴파일 에러로 바꿔주는 것이 지네릭스
ArrayList list = new ArrayList();
JDK 1.5이전에는 이렇게 써도 됐지만
ArrayList<Object> list = new ArrayList<Object>();
이제는 이렇게 써야한다.
에러가 나지는 않지만 무조건 이렇게 써야한다.
ArrayList
일반클래스 에서 ArrayList<E>
지네릭클래스로 바뀌었다.
프로그램을 실행중에 에러가 발생해서 프로그램이 죽는 것 보다 프로그램을 만들 때 발생하여 고칠 수 있는 컴파일 에러가 더 좋기 때문이다.
따라서 ClassCastException, 실행 중 발생하는 형변환을 컴파일 단에서 체크할 수 있게 해준 것이 지네릭스다.