자바에서 제네릭이란
데이터 타입을 일반화(generalize)한다는 의미다.
클래스나 메소드에서 사용할 내부 데이터 타입을 컴파일시 미리 지정하는 방법이다.
1. 클래스나 메소드 내부에서 사용되는 객체 타입의 안정성을 높일 수 있다.
2. 반환값에 대한 타입 변환 및 타입 검사에 들어가는 노력을 줄일 수 있다.
--> JDK 1.5 이전 버전에서는 여러 타입을 사용하는 클래스나 메소드에서
인수나 변환값으로 Object 타입을 사용했다.
이 경우, 반환된 Object 객체를 다시 원하는 타입으로 변환해야 하며, 이때 오류가 날 수 있다.
JDK 1.5부터는 제네릭을 사용하면 컴파일 시 미리 타입이 정해지므로,
타입 검사나 타입 변환과 같은 번거로운 작업을 생략 할 수 있다.
제네릭은 자바 코드에서 선언되고
사용된 제네릭 타입은 컴파일 시 컴파일러에 의해 자동으로 검사되어 타입 변환된다.
이후 코드 내 모든 제네릭 타입은 제거되어, 컴파일된 class 파일에는 어떠한 제네릭 타입도 포함되지 않게 된다.
이런 식으로 동작하는 이유는 제네릭을 사용하지 않는 코드와의 호환성을 유지하기 위해서다.
제네릭 선언 및 생성
class Test<T> {
T element;
void setElement(T element) { this.element = element; }
T getElement() { return element; }
}