JAVA

제네릭

Stater 2019. 10. 7. 09:00

-제네릭 프로그래밍이란

-변수의 선언이나 메서드의 매개변수를 하나의 참조 자료형이 아닌 여러 자료형을 변환 될 수 있도록 프로그래밍 방식

-실제 사용되는 참조 자료형으로의 변환은 컴파일러가 검증하므로 안정적으로 프로그래밍을 할 수 있다는 장점이 있다.

 

- 자바에서 사용햐는 여러가지 라이브러리를 구현 해놓은 것들의 집합체

- 컬렉션 프레임워크를 이해하는데 도움이 된다.

-  자바 프로그램이 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