JAVA Programming/JAVA 문제

[60] 제네릭 예제 내가 직접 생각해보면서 만들기

꾸준히개발하자 2020. 7. 20. 11:28

package generic2;

public class Plastic extends Material {
	
	
	public String toString() {
		return "플라스틱입니다";
	}

	@Override
	public void doPrinting() {
		System.out.println("플라스틱으로 만듬 ");
	}
	
}

 

package generic2;

public class Powder extends Material{
	
	
	public String toString() {
		return "파우더 입니다.";
	}

	@Override
	public void doPrinting() {
		System.out.println("파우더로 만듬 ");
	}
}

 

package generic2;

public class GenericPrinterTest {
	public static void main(String[] args) {
		
		GenericPrinter<Plastic> genplastic = new GenericPrinter<>();
		
		Plastic plastic = new Plastic();
		
		genplastic.setMaterial(plastic);
		System.out.println(plastic);
		
		GenericPrinter genpowder = new GenericPrinter<>();
		
		Powder powder = new Powder();
		genpowder.setMaterial(powder);
		System.out.println(powder);
	
		
		plastic.doPrinting();
		powder.doPrinting();
		
	}
}

 

package generic;

public class GenericPrinterTest {
	
	public static void main(String[] args) {
		
		GenericPrinter<Powder> powderPrinter = new GenericPrinter<>(); // <>뒤에 유추해서 안쓸수도 있다.
		
		// 이제 파우더에 대한 재료를 넣어준다.
		Powder powder = new Powder();
		powderPrinter.setMaterial(powder); // 파우더가 프린터의 재료가 된다. 
		System.out.println(powderPrinter); // 재료는 파우더 입니다. 
		
		
		GenericPrinter<Plastic> plasticPrinter  = new GenericPrinter<>();
		Plastic plastic = new Plastic();
		
		plasticPrinter.setMaterial(plastic); // 자료형을 대입을 해서 쓸수있다.
		System.out.println(plasticPrinter);

//		GenericPrinter<Water> waterPrinter = new GenericPrinter<>();  제네릭클래스가 상속받은 타입만 올수있다. 
		
		powderPrinter.printing();
		plasticPrinter.printing();
		
		GenericPrinter printer = new GenericPrinter(); // 제네릭 타입을 안쓸수도 있다.
		
		
	}
}

 

package generic2;

public abstract class Material {
	public abstract void doPrinting();
	
}

 

package generic2;

public class GenericPrinter <T extends Material> {

	private T material; // 타입을 T로 준다.
	
	
	public T getMaterial() {
		return material;
	}
	
	public void setMaterial(T material) {
		this.material = material;
	}
	
	public String toString() {
		return material.toString(); // 자식들의 toString 이 호출된다. 
	}
	
	public void doPrinting() {
		
		System.out.println("재료로 만듬");
	}
	
}