제네릭 자료형 정의
● 클래스에서 사용하는 변수의 자료형이 여러개 일수 있고, 그 기능(메서드)은 동일한 경우 클래스의 자료형을 특정하지 않고 추후 해당 클래스를 사용할 때 지정 할 수 있도록 선언하는 것
● 실제 사용되는 자료형의 변환은 컴파일러에 의해 검증되므로 안정적인 프로그래밍 방식\
● 컬렉션 프레임워크에서 많이 사용되고 있음
제네릭 클래스 정의
public class GenericPrinter<T> {
private T material;
public void setMaterial(T material) {
this.material = material;
}
public T getMaterial() {
return material;
}
public String toString(){
return material.toString();
}
}
; } }
● 자료형 매개변수 T(type parameter) : 이 클래스를 사용하는 시점에 실제 사용할 자료형을 지정, static 변수는 사용할 수 없음
● GenericPrinter : 제네릭 자료형
● E : element, K: key, V : value 등 여러 알파벳을 의미에 따라 사용 가능
<T extends 클래스> 사용하기
상위 클래스의 필요성
● T 자료형의 범위를 제한 할 수 있음
● 상위 클래스에서 선언하거나 정의하는 메서드를 활용할 수 있음
T extends 를 사용한 프로그래밍
● GenericPrinter 에 material 변수의 자료형을 상속받아 구현
● T에 무작위 클래스가 들어갈 수 없게 Material 클래스를 상속받은 클래스로 한정

Material.java
public abstract class Material {
public abstract void doPrinting();
}
Powder.java
public class Powder extends Material{
public void doPrinting() {
System.out.println("Powder 재료로 출력합니다");
}
public String toString() {
return "재료는 Powder 입니다";
}
}
Plastic.java
public class Plastic extends Material{
public void doPrinting() {
System.out.println("Plastic 재료로 출력합니다");
}
public String toString() {
return "재료는 Plastic 입니다";
}
}
GenericPrinter.java
public class GenericPrinter<T extends Material> {
private T material;
public void setMaterial(T material) {
this.material = material;
}
public T getMaterial() {
return material;
}
public String toString(){
return material.toString();
}
public void printing() {
material.doPrinting();
}
}