제네릭스 용어
Box<T> 제네릭 클래스. 'T의 Box' 또는 'T Box'라고 읽는다.
T 타입 변수 또는 타입 매개변수.(T는 타입 문자)
Box 원시 타입(raw type)
class Box <T> {} ← 제니릭 클래스 선언
사용시:
Box<String> b = new Box<String>(); ← String은 대입된 타입(매개변수화된 타입)
제네릭 타입과 다형성
참조변수와 생성자의 타입은 일치해야 한다.
ArrayList<TV> tvList = new ArrayList<TV>(); // OK
ArrayList<Product> tvList = new ArrayList<TV>(); // ERROR (조상 자손 관계라도 소용없다.)
제네릭 클래스간의 다형성은 성립된다.
List<TV> tvList = new ArrayList<TV>(); // OK : ArrayList가 List구현
List<TV> tvList = new LinkedList<TV>(); // OK : LinkedList가 List구현
매개변수의 다형성도 성립
List<Product> tvList = new ArrayList<TV>(); // Product는 TV, Audio의 조상클래스
list.add(new Product()); // OK
list.add(new TV()); // OK
list.add(new Audio()); // OK
이는 ArrayList의 add메서드
boolean add(E e) 가 boolean add(Product e)로 바뀌었기 때문이다.
EX)
import java.util.ArrayList;
import java.util.List;
public class EX02 {
public static void main(String[] args) {
ArrayList<Product> productList = new ArrayList<Product>(); //Product 타입 저장가능
ArrayList<TV> tvList = new ArrayList<TV>(); //TV 타입만 저장가능
productList.add(new Product());// OK
productList.add(new TV()); // OK
productList.add(new Audio()); // OK
// tvList.add(new Product()); // ERROR
tvList.add(new TV()); // OK
// tvList.add(new Audio()); // ERROR
printAll(productList);
// printAll(tvList); // ERROR
}
private static void printAll(ArrayList<Product> list) {
for (Product product : list) System.out.println(product);
}
}
출처: 남궁성님 유튜브 강의
https://www.youtube.com/user/MasterNKS
'java' 카테고리의 다른 글
Generics 04 제한된 제네릭 클래스(제네릭스의 제약) (0) | 2022.01.03 |
---|---|
Generics 03 Iterator, HashMap과 제네릭스 (0) | 2022.01.03 |
Generics 01 제네릭스란? (0) | 2021.12.31 |
Lambda 07 Collector (0) | 2021.12.30 |
Optional (0) | 2021.12.30 |