변수의 선언이나 메서드의 매개변수를 하나의 참조 자료형이 아닌 여러 자료형으로 변환 될 수 있도록 프로그래밍 하는 방식이다. 실제 사용되는 참조 자료형으로의 변환은 컴파일러가 검증하므로 안정적이다.
제네릭은 클래스나 메서드에서 사용할 내부 데이터 타입을 컴파일 시에 미리 지정하고, 컴파일 과정에서 잘못된 타입이 사용될 수 있는 문제를 제거할 수 있다. 클래스나 메서드 내부에서 사용되는 객체의 타입 안정성을 높일 수 있고, 반환값에 대한 타입 변환 및 타입 검사에 들어가는 노력을 줄일 수 있다.
(비 제네릭 타입은 반환값에 대한 타입 변환이 필요해 성능에 영향을 끼칠 수 있다.)
List list = new ArrayList();
list.add("test");
String str = (String) list.get(0); // String 타입으로 형변환이 필요함
-쓸 수 있는 타입에 대한 한정을 주기 위해 상속을 사용한다. (<T extends 상위 클래스>)
-> 상위 클래스를 상속받은 하위 클래스만 T 타입 사용 가능
-타입에 제약이 없으면 호출할 수 있는 메서드는 Object의 메서드 밖에 없다.
-제네릭 메서드는 메서드의 매개변수를 자료형 매개변수로 사용하는 메서드로 메서드 내에서의 자료형 매개변수는 메서드 내에서만 유효하다. (지역변수와 같은 개념)
-제네릭 타입을 사용하지 않으면 Object로 간주 (타입은 쓰는 것이 좋음)