컴파일 시에 미리 타입을 강하게 체크하여 에러를 사전에 방지할 수 있다.
List list = new ArrayList();
list.add("hello");
String str = (String) list.get(0); // 타입 변환이 필요하다.
List<String> list = new ArrayList<String>();
list.add("hello");
String str = list.get(0); // 타입 변환이 필요없다.
(class<T> interface<T>)
타입을 파라미터로 가지는 클래스와 인터페이스를 생성할 수 있다.
public class 클래스명<T> { ... }
public interface 인터페이스명<T> { ... }
타입 파라미터의 네이밍은 변수명과 동일한 규칙에 따라 작성할 수 있다. 단, 관례적으로 영문 대문자 한글자로 작성한다.
모든 종류의 객체를 저장하면서 타입 변환이 일어나지 않는 마법을 부릴 수 있다.
public class Box<T> {
public T t;
public T getT() {
return t;
}
public void setT(T t) {
this.t = t;
}
}
public class Main {
public static void main(String[] args) {
Box<String> stringBox = new Box<>();
stringBox.setT("문자열");
String stringBoxT = stringBox.getT();
System.out.println("stringBoxT = " + stringBoxT); // 저장된 문자열 출력
Box<Integer> integerBox = new Box<>();
integerBox.setT(100);
Integer integerBoxT = integerBox.getT();
System.out.println("integerBoxT = " + integerBoxT); // 저장된 숫자 출력
}
}