컴파일 타임에 타입을 체크함으로 써 코드의 안정성을 높여주는 기능
List<T> -> List<String>
// 제네릭 미사용
List list = new ArrayList<>();
list.add("test");
String str = (String)list.get(0);
// 제네릭 사용
List<String> list = new ArrayList<>();
list.add("test");
list.add(1); //Complie Error
이점
컴파일 시 강한 타입 쳌크를 할 수 있다.
타입변환(Casting)을 제거한다
List<Object> obj = new ArrayList<Integer>(); ???
//배열
Object[] obj = new Integer[1]; // 공변
//제네릭
List<Object> obj = new ArrayList<Integer>(); // error 무공변
제네릭 타입이란 타입을 파라미터로 가지는 클래스와 인터페이스를 말한다.
// 타입 파라미터 T
public class 클래스명<T> {...}
public interface 인터페이스명<T> {...}
// 비제네릭
class Category {
private Object object;
public void set(Object object){
this.object = object;
}
}
// 제너릭
class Category<T> {
private T t;
public void set(T t) {
this.t =t ;
}
}
제네릭 메소드는 아규먼트, 리턴타입으로 타입 파라미터를 갖는 메소드를 말한다
호출 방법 2
pubic <T> Box<T> boxting(T t){...}