import java.util.*;class Java {
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); // 컴파일 OK. 실행시 오류
System.out.println(list);
}
}
코드상 문제가 없는데 실행시 오류가 나옴(형변환 에러)
Exception in thread "main" java.lang.ClassCastException: class java.lang.String cannot be cast to class java.lang.Integer (java.lang.String and java.lang.Integer are in module java.base of loader 'bootstrap') at ff.Java.main(Java.java:12)
실행시 오류보다 컴파일 에러가 나음. 실행시 오류가 나면 실행시 죽음. 미리확인해서 수정하는게 좋음
실행시 오류를 컴파일 에러로 끌고 오는게 제너릭
이미 타입을 지정했으니 형 변환도 생략 가능
### 타입 변수
- 제너릭 클래스를 작성할 때, Object타입 대신 타입 변수를 선언해서 사용

타입변수는 뭐를 써도 상관 없으나 Type을 따서 T를 쓰거나 Element를 따서 E를 사용하는게 정석
### 타입 변수에 대입하기
- 객체를 생성시, 타입 변수(E) 대신 실제 타입(Tv)을 지정(대입)
- 타입 변수 대신 실제 타입이 지정되면, 형변환 생략 가능
--> 옛날에는 Object타입이라 형변환이 필요했는데 제너릭 덕분에 형변환 불필요