-제네릭 프로그래밍이란
-변수의 선언이나 메서드의 매개변수를 하나의 참조 자료형이 아닌 여러 자료형을 변환 될 수 있도록 프로그래밍 방식
-실제 사용되는 참조 자료형으로의 변환은 컴파일러가 검증하므로 안정적으로 프로그래밍을 할 수 있다는 장점이 있다.
- 자바에서 사용햐는 여러가지 라이브러리를 구현 해놓은 것들의 집합체
- 컬렉션 프레임워크를 이해하는데 도움이 된다.
- 자바 프로그램이 5버전부터 나온 프로그래밍
여러 참조형으로 대체 될 수 있는 부분을 하나의 문자로 표현
-ex GenericPrinter<T> 제네릭 클래스
public class GenericPrinter<T>{
private T material;
public void setMaterial(T material){
this.material=material;
}
public T getMaterial(){
return material;
}
}
- type의 의미로 T사용
package generic;
public class GenericPrinter<T extends Meterial> {
private T material;
public T getMaterial() {
return material;
}
public void setMaterial(T material) {
this.material = material;
}
public String toString() {
return material.toString();
}
public void printing() {
material.doPrinting();
}
}
=====================================================================================
package generic;
public class GenericPrintTest{
public static void main(String[] args) {
//아래처럼 둘다가능
GenericPrinter<Powder> powderPrinter = new GenericPrinter<Powder>();
Powder powder = new Powder();
powderPrinter.setMaterial(powder);
System.out.println(powderPrinter);
// GenericPrinter<Powder> powderPrinter = new GenericPrinter<>();
GenericPrinter<Plastic> plasticPrinter = new GenericPrinter<Plastic>();
Plastic plastic = new Plastic();
plasticPrinter.setMaterial(plastic);
System.out.println(plasticPrinter);
//문제가 되므로 상위 클래스를 하나 더 선언->Meterial class 상위클래스를 선언해서 제한할수 있다.
// GenericPrinter<Water> waterPrinter = new GenericPrinter<Water>();
powderPrinter.printing();
plasticPrinter.printing();
}
}
=====================================================================================
package generic;
public abstract class Meterial {
public abstract void doPrinting();
}
=====================================================================================
package generic;
public class Plastic extends Meterial{
public String toString() {
return "재료는 플라스틱입니다.";
}
@Override
public void doPrinting() {
System.out.println("플라스틱 프린팅입니다.");
}
}
=====================================================================================
package generic;
public class Powder extends Meterial {
public String toString() {
return "재료는 Powder 입니다.";
}
@Override
public void doPrinting() {
System.out.println("Powder 프린팅입니다.");
}
}
=====================================================================================
package generic;
public class Water {
}
=====================================================================================
반응형
'JAVA' 카테고리의 다른 글
Stack과 Queue (0) | 2019.10.09 |
---|---|
List 인터페이스 (0) | 2019.10.08 |
컬렉션 프레임워크(Collection Framework) (0) | 2019.10.06 |
String 클래스 (0) | 2019.10.05 |
Object 클래스 (0) | 2019.10.04 |