chapter05 복습 순서 |
메모 | |
ch01> MainTest1 ch02> MainTest1 Plastic Powder ThreeDPrinter1 ThreeDPrinter2 ThreeDPrinter3 |
ch03> GenericPrinter GenericPrinter2 GenericPrinterTest1 Material Plastic Powder ExtendsClass Water |
제네릭 프로그래밍을 사용하는 이유
package ch01; public class MainTest1 { public static void main(String[] args) { //무엇이든 담을 수 있는 제네릭(Generic) 프로그래밍 //Generic - 일반화 (jdk 5.0 ~) //제네릭 프로그래밍을 사용하는 이유? //우리가 변수를 사용한다고 하면 변수에 항상 자료형을 먼저 지정하게 되어있다. //여러 자료헝으로 사용될 수있는 변수가 있을 때 우리는 제네릭 프로그래밍을 설계 , 사용할 수 있다. //변수를 기반으로 클래스를 만든다고 가정했을 때 다양한 자료형으로 사용되기 때문에 여러개의 //클래스를 만들게 하거나 또는 변수명을 달리해서 코드에 복잡도가 올라가고 가독성을 떨어지게 한다. //결론 //다양한 자료형이 적용될 수 있는 클래스를 만드는 것이 제네릭 프로그래밍 방식이라고 한다. //제네릭 자료형의 정의 //클래스에서 사용하는 변수의 자료형이 여러 개 일 수 있고, 그 기능(메서드)은 동일한 경우 클래스의 //자료형을 측정하지 않고 추후 해당 클래스를 사용할 때 지정할 수 있도록 선언 하는것. //제네릭 사용하지 않는 경우 vs 제네릭을 사용하는 프로그램 방식 }//end of main }//end of class |
3D프린터 재료 출력
package ch02;
public class Plastic {
@Override
public String toString() {
return "재료는 plastic입니다.";
}
}
package ch02;
public class Powder {
@Override
public String toString() {
return "재료는 powder";
}
}
package ch02;
public class ThreeDPrinter1 {
private Powder material;
public Powder getMaterial() {
return material;
}
public void setMaterial(Powder material) {
this.material = material;
}
}//end
package ch02;
public class ThreeDPrinter2 {
private Plastic material;
public Plastic getMaterial() {
return material;
}
public void setMaterial(Plastic material) {
this.material = material;
}
}
package ch02;
public class ThreeDPrinter3{
private Object material;
public Object getMaterial() {
return material;
}
public void setMaterial(Object material) {
this.material = material;
}
@Override
public String toString() {
return "안녕하세요 toString 정의 했어요";
}
}
package ch02;
public class MainTest1 {
public static void main(String[] args) {
//재료
Powder powder = new Powder();
Plastic plastic = new Plastic();
// 1. ThreeDPrinter1 -> 객체 생성
ThreeDPrinter1 printer1 = new ThreeDPrinter1();
//setter 메서드 사용할 때 Powder
printer1.setMaterial(powder);
System.out.println(printer1.getMaterial());
System.out.println("-----------------------------");
ThreeDPrinter2 printer2 = new ThreeDPrinter2();
printer2.setMaterial(plastic);
System.out.println(printer2.getMaterial());
System.out.println("-----------------------------");
ThreeDPrinter3 printer3 = new ThreeDPrinter3();
//1.재료 세팅
printer3.setMaterial(powder);
//자료를 꺼내 보세요
System.out.println(printer3.getMaterial());
// printer3.setMaterial(plastic);
//요청 : 변수에 ThreeDPrinter3에 재료를 저장해 주세요
//재료 : temp1
Powder temp1 = (Powder)printer3.getMaterial();
//질문
System.out.println(printer3);
}//end of main
}//end of class
GenericPrinter
package ch03;
//T -> 임시값
public class GenericPrinter<T> {
//제네릭 프로그램 설계 방식
//T라는 대체 문자를 사용한다. E -> element , K - key, V - value
//자료형 매개변수 (type parameter)
private T material;
public T getMaterial() {
return material;
}
public void setMaterial(T material) {
this.material = material;
}
// toString 오버라이드
@Override
public String toString() {
return material.toString();
}
}
GenericPrinter2
package ch03;
public class GenericPrinter2<T extends Material> {
private T material;
//alt shift s
public T getMaterial() {
return material;
}
public void setMaterial(T material) {
this.material = material;
}
@Override
public String toString() {
return material.toString();
}
}
Material
package ch03;
public abstract class Material {
public abstract void doPrinting();
}
Plastic
package ch03;
public class Plastic extends Material{
@Override
public String toString() {
return "재료는 plastic입니다.";
}
@Override
public void doPrinting() {
System.out.println("플라스틱 재료로 출력합니다.");
}
}
Powder
package ch03;
public class Powder extends Material{
@Override
public String toString() {
return "재료는 powder";
}
@Override
public void doPrinting() {
System.out.println("파우더 재료로 출력합니다.");
}
}
Water
package ch03;
public class Water {
@Override
public String toString() {
return "재료는 물입니다.";
}
}
GenericPrinterTest1
package ch03;
import ch02.Plastic;
import ch02.Powder;
public class GenericPrinterTest1 {
public static void main(String[] args) {
//재료
Powder powder = new Powder();
Plastic plastic = new Plastic();
//사용 할 때 자료형을 넣어주면 된다.
//사용방법 : T 대신에 사용할 때 어떤 자료형을 사용할지 지정해 주면 된다.
GenericPrinter<Powder> genericPrinter1 = new GenericPrinter<>();
//재료 녛기
genericPrinter1.setMaterial(powder);
//재료 꺼내기
Powder tempPowder = genericPrinter1.getMaterial();
System.out.println(tempPowder);
System.out.println("--------------------------");
//문제 1. 플라스틱으로 제네릭 클래스를 선언하고 재료세팅 후에 재료를 꺼내 봅니다.
GenericPrinter<Plastic> genericPrinter2 = new GenericPrinter<Plastic>();
//재료 녛기
genericPrinter2.setMaterial(plastic);
//재료 꺼내기
Plastic tempPlastic = genericPrinter2.getMaterial();
System.out.println(tempPlastic);
System.out.println("--------------------------");
//GenericPrinter toString();
System.out.println(genericPrinter1);
System.out.println("--------------------------");
System.out.println(genericPrinter2);
}
}
ExtendsClass
package ch03;
public class TExtendsClass {
public static void main(String[] args) {
// <T extends 클래스> 사용하기
// T 자료형의 범위를 제한할 수 있음
// (제한하지 않으면 자료형으로 아무 클래스나 올 수 있다.)
GenericPrinter2<Powder> powderPrinter = new GenericPrinter2<>();
powderPrinter.setMaterial(new Powder());
Powder powder = powderPrinter.getMaterial();
System.out.println(powder);
System.out.println("------------------------");
//GenericPrinter2<Water> printer2 = new GenericPrinter2<Water>();
}
}
'코리아 IT아카데미 > Java' 카테고리의 다른 글
18일차 | git call back, 콜백메서드★, git branch 사용 (0) | 2021.11.10 |
---|---|
17일차 | Git 관리, 래퍼 클래스 (0) | 2021.11.09 |
14일차 | swing (0) | 2021.11.09 |
15일차 | GUI 복습, Thread (0) | 2021.11.09 |
16일차 | thread 동기화 , gif 넣기, 로또 번호 생성기 (0) | 2021.11.08 |