💬 컬렉션은 제네릭이라는 기법으로 구현되어 있다. 때문에, 컬렉션 클래스나 인터페이스 이름에는 타입 매개 변수가 항상 포함된다.
💬 컬렉션의 요소는 객체 (ex. Integer, String)들만 가능하다.
Vector<int> v = new Vector<int>(); // 컴파일 오류. int는 사용 불가
Vector<Integer> v = new Vector<Integer>();
💬 <E>
, <T>
, <K>
등을 말하며, 컬렉션의 요소를 일반화시킨 타입이다.
💬 컬렉션이 다룰 수 있는 원소의 타입을 여러 종류로 변신할 수 있도록 사용한다.
💬 타입 매개 변수에는 구체적인 타입 (ex. Integer, String)을 지정하여 사용한다.
✔ E : Element를 의미
✔ T : Type을 의미
✔ V : Value을 의미
✔ K : Key을 의미
💬 제네릭 클래스를 선언하는 방법은 기존의 클래스 선언 방법에서, 클래스 이름 다음에 일반화된 타입의 매개 변수를 <와 >사이에 추가한다는 차이가 있다.
타입 매개 변수 T를 가진 제네릭 클래스 Myclass 선언
public class MyClass<T> { //제네릭 클래스 MyClass, 타입 매개 변수 T
T val; // 변수 val의 타입은 T
void set(T a) {
val = a; // T 타입의 값 a를 val에 지정
}
T get() {
return val; // T 타입의 값 val 리턴
}
}
구체적인 타입을 대입하고 구체적인 객체를 생성
MyClass<String> s = new MyClass<String>(); // 제네릭 타입 T를 String으로 구체화
s.set("apple");
System.out.println(s.get()); // "apple" 출력
MyClass<Integer> n = new MyClass<Integer>(); // 제네릭 타입 T를 Integer으로 구체화
n.set(3);
System.out.println(n.get()); // 5 출력
Reference
명품 자바 에센셜 (2014, 황기태)