다양한 타입의 객체를 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입체크(compile-time type check)를 해주는 기능이다. 객체의 타입을 컴파일 시에 체크하기 때문에 객체의 타입 안정성을 높이고 형변환의 번거로움이 줄어든다.
선언하는 방법은 다음과 같다.
class Box<T>{
T item;
voide setItem(T item) { this.item = item; }
T getItem() { return item; }
}
Box<T>
에서 T를 '타입 변수' 또는 '타입 매개변수'라고 한다.
Box<String> b = new Box<String>();
타입 매개변수에 타입을 지정하는 것을 '지네릭 타입 호출'이라고 하고 지정된 타입 String을 매개변수화된 타입이라고 한다.
객체별로 다른 타입을 지정하는 것은 적절하다. 지네릭스는 인스턴스별로 다르게 동작하도록 하려고 만든 기능이기 때문이다. 그러나 모든 객체에 대해 동일하게 동작해야 하는 static 멤버에 타입 변수 T를 사용할 수 없다.
메서드의 선언부에 지네릭 타입이 선언된 메서드
서로 관련된 상수를 편리하게 선언하기 위한 것으로 여러 상수를 정의할 때 사용하면 유용하다.
enum 열거형이름 { 상수명1, 상수명2, ...
사용할 때는 '열거형이름.상수명'이다.
프로그램의 소스코드 안에 다른 프로그램을 위한 정보를 미리 약속된 형식으로 포함시킨 것이 애너테이션이다. 주석처럼 프로그래밍 언어에 영향을 미치지 않으면서도 다른 프로그램에게 유용한 정보를 제공할 수 있다는 장점이 있다.
애너테이션을 위한 애너테이션. 애너테이션을 정의할 때 애너테이션의 적용대성이나 유지기간 등을 지정하는데 사용된다.
@interface 애너테이션이름 {
타입 요소이름();
...
}