Box<T> : 지네릭 클래스. 'T의 Box'또는 'T Box'라고 읽는다.
T : 타입변수 또는 타입 매개변수. (T는 타입 문자)
Box : 원시타입(raw type) - 일반클래스 -> 지네릭 클래스


- 참조 변수와 생성자의 대입된 타입은 일치해야 한다.
ArrayList<Tv> list = new ArrayList<Tv>(); // OK. 일치 ArrayList<Product> list = new ArrayList<Tv>(); 에러. 불일치
- Product = 조상 / Tv = 자손 관계일 때도 불가능하다.
- 지네릭 클래스간의 다형성은 성립.(여전히 대입된 타입은 일치해야)
List<Tv> list = new ArrayList<Tv>(); // OK. 다형성. ArrayList가 List를 구현 List<Tv> list = new LinkedList<Tv>(); // OK. 다형성. LinkedList가 List를 구현
- 매개변수의 다형성도 성립.
ArrayList<Product> list = new ArrayList<Product>(); list.add(new Product()); list.add(new Tv()); // OK. list.add(new Audio()); // OK. Product자손도 OK. boolean add(E e) {...} -> boolean add(Product e) {...} // 다형성. Product와 그 자손 객체 가능 E get(int index) {...} Product p = list.get(0); Tv t = (Tv)list.get(1);
- 클래스를 작성할 때, Object타입 대신 T와 같은 타입 변수를 사용
< 일반 클래스 > < 지네릭 클래스 > public interface Iterator { public interfac Iterator<E> { boolena hasNext(); boolean hasNext Object next(); -> E next(); void remove(); void remove(); } }Iterator it = list.iterator(); while(it.hasNext()) { student s = (Student)it.next(); ...
- 이제 next가 student를 반환하므로 타입이 일치하기 때문에 형변환이 필요없다.
- 여러 개의 타입 변수가 필요한 경우, 콤마(,)를 구분자로 선언
- Key와 Value의 타입이 다를 때 사용한다.
- 타입변수의 타입이 일치해야 한다.
- K = String / V = Student
- Object였기 때문에 형변환이 필요했는데, get이 반환하는 것이 Student가 되었으므로 형변환이 필요 없게 되었다.