ArrayList<Integer> list1 = new ArrayList<Integer>();
ArrayList<String> list2 = new ArrayList<Integer>();
LinkedList<Double> list3 = new LinkedList<Double>():
LinkedList<Character> list4 = new LinkedList<Character>();
<>안에 있는게 제네릭스다.
메서드나 컬렉션 클래스에 컴파일 시 타입 채크를 해주는 기능이다.
객체의 타입을 컴파일 시에 체크하기 대문에 객체의 타입 안정성을 높이고 형변환의 번거로움이 줄어든다.
즉 다룰 객체의 타입을 미리 명시해서 번거로운 형 변환을 줄여준다.
public class Box<T> {
private T item;
public void setItem(T item) {
this.item = item;
}
public T getItem() {
return item;
}
}
Box<String> stringBox = new Box<>();
stringBox.setItem("Hello");
String str = stringBox.getItem();
컴파일 시 위의 Box 클래스에서 제네릭 타입 T는 String형태로 치환된다.
실행 시점에는 타입의 정보가 소거된다. 이를 타입 소거라고 한다.
즉, 런타임 시에는 제네릭스가 존재하는 않고, 대신 Object로 처리되거나 해당 제약에 맞는 상위 타입으로 변환된다.
//컴파일된 코드
public class Box {
private Object item;
public void setItem(Object item) {
this.item = item;
}
public Object getItem() {
return item;
}
}