.Generics(제너릭)
: 제너릭스는 JDK 1.5에서의 가장 큰 변화 중 하나로 다양한 타입의 객체를
다루는 메소드나, 컬렉션 클래스에 컴파일시의 Type check를 해주는 기능이다.
객체의 타입을 컴파일시에 해주기 때문에 객체의 타입 안정성을 높이고 형변환의
번거로움이 줄어 든다.
ArrayList와 같은 컬렉션 클래스는 다양한 종류의 객체를 담을 수 있긴하지만
보통 한 종류의 객체를 담는 경우가 많습니다. 그런데도 꺼낼때마다 타입을
체크하고 형변환 하는 것은 불편합니다.
제너릭스는
1. 타입 안정성을 제공합니다. + 코드의 재사용성을 높여준다.
2. 타입 체크와 형변환을 생략할 수 있으므로 코드가 간결해 집니다.
3. 실행 후 에러발견보다 컴파일시에 에러를 잡는 것이 좋은데 제너릭스가 그렇다.
자바에서 제네릭(generic)이란 데이터의 타입(data type)을
일반화(generalize) 한다는 것을 의미합니다.
제네릭은 클래스나 메소드에서 사용할 내부 데이터 타입을 컴파일 시에
미리 지정하는 방법입니다.
이렇게 컴파일 시에 미리 타입검사(Type check)를 수행하면
다음과 같은 장점을 가집니다.
1. 클래스나 메소드 내부에서 사용되는 객체의 타입 안정성을 높을 수 있습니다.
2. 반환값에 대한 타입변환 및 타입 검사에 들어가는 노력을 줄일 수 있습니다.
JDK 1.5 이전에서는 여러 타입을 사용하는 대부분의 클래스나 메소드에서
인수나 반환값으로 Object타입을 사용했습니다.
하지만 이 경우에는 반환된 Object 객체를 다시 원하는 타입으로 타입 변환해야 하며,
이때 오류가 발생할 가능성도 존재합니다.
하지만 JDK 1.5부터 도입된 제너릭을 사용함녀 컴파일시에 미리 타입이 정해지므로,
타입 검사나 타입 변환과 같은 번거로운 작업을 생략할 수 있게 됩니다.
: 제네릭의 제거 시기
자바 코드에서 선언되고 사용된 제네릭 타입은 컴파일시 컴파일러에 의해
자동으로 검사되어 타입 변환됩니다.
그리고서 코드 내의 모든 제너릭 타입은 제거되어,
컴파일된 class 파일에는 어떠한 제네릭 타입도 포함되지 않게 됩니다
이런 식으로 동작하는 이유는 제네릭을 사용하지 않는 코드와의 호환성을
유지하기 위해서입니다.
제너릭은 다룰 객체 타입을 미리 명시해 줌으로써 형변환 하지 않아도 되게
하는 것입니다.
제너릭스는 참조타입, 간단히 말해서 Type을 의미하는
'T'를 사용합니다. 어떠한 참조형(reference type) 타입도 가능하다는 뜻입니다.
뿐만 아니라 요소를 의미하는 'E'=>element, 'K'=>key, 'V'=>value
도 사용됩니다. 이드은 기호의 종류만 다를 뿐 '임의의 참조형 타입'을 의미한다는
것은 모두 같습니다. 기존의 다양한 종류의 타입을 다루는 메소드의 매개 변수나
리턴 타입으로 Object타입의 참조 변수를 많이 사요했고 그로 이해 형변환이
불가피 했지만 이젠 Object 타입대신 원하는 타이블 지정하기만 하면 됩니다.
제네릭(Generic)은 클래스 내부에서 지정하는 것이 아닌 외부에서 사용자에 의해 지정되는것을 의미한다.
한마디로 특정(Specific) 타입을 미리 지정해주는 것이 아닌 필요에 의해 지정할 수 있도록 하는
일반(Generic) 타입이라는 것이다.
형식
< >