[Java]Generic Programming(Generic Programming)
Generic class / Programming
プログラミング中に、複数のデータ型に使用できる変数がある場合は、これらの変数に基づいてクラスを作成する必要があります.この場合、似たようなコードをデータ型に従って複数のクラスを作成すると、オーバーヘッドが発生します.
この場合、複数のデータ型を含むようにGeneric classを使用してプログラミングする必要があります.
Generic classは宣言メソッドを使用して、後でクラスを使用するときにデータ型を指定します.
これらのGeneric classを使用して、さまざまなデータ型に適したclassまたはmethodを作成することを汎用プログラミングと呼びます.
Generic classはJava 5.0から提供されます.
Collection Frameworkで多く使われています.
Generic classの使い方
public class GenericPrinter<T>
private T material;
public T getMaterial() {
return material;
}
public void setMaterial(T material) {
this.material = material;
}
GenericPrinter<Powder> powderPrinter = new GenericPrinter<>();
Generic classの無効化
👨🏻💻 Example Code
Powder.java
package ch06;
public class Powder {
public String toString() {
return "재료는 powder입니다. ";
}
}
ThreeDPrinter1.javapackage ch06;
public class ThreeDPrinter1 {
private Powder material;
public Powder getMaterial() {
return material;
}
public void setMaterial(Powder material) {
this.material = material;
}
public String toString() {
return "재료는 Powderrf 입니다.";
}
}
上記のPowderclassと同様の他のオブジェクトを作成する場合は、TheeDPrinterコードもclassの作成に伴って個別に作成する必要があります.あるいは、以下のコードに示すように、Objectを用いて符号化してもよい.ただし、Objectの場合、インスタンスの作成と使用中に形状を変換する手間がかかります.ThreeDPrinter3.java
package ch06;
public class ThreeDPrinter3 {
private Object material;
public Object getMaterial() {
return material;
}
public void setMaterial(Object material) {
this.material = material;
}
public String toString() {
return "재료는 Powderrf 입니다.";
}
}
ThreeDPrinterTest.javapackage ch06;
public class ThreeDPrinterTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Powder powder = new Powder();
ThreeDPrinter3 printer = new ThreeDPrinter3();
printer.setMaterial(powder);
Powder p = (Powder)printer.getMaterial();
// ThreeDPrinter3의 경우는 Object type을 이용하여 material을 만들었는데
// 이럴 경우 형 변환을 해줘야해서 번거로움이 발생한다.
// 그래서 generic programming이 생겨났다.
}
}
Generic classのコードの使用
👨🏻💻 Example Code
GenericPrinter.java
package ch06;
public class GenericPrinter<T> {
// T는 자료형 매개변수로 이 클래스를 사용하는 시점에 실제 사용할 자료형을 지정하며 static 변수는 사용할 수 없다
private T material;
// 나중에 사용할 때 사용할 자료형을 입력하면 해당 자료형으로 생성된다.
public T getMaterial() {
return material;
}
public void setMaterial(T material) {
this.material = material;
}
public String toString() {
return material.toString();
}
}
GenericPrinterTest.javapackage ch06;
public class ThreeDPrinterTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Powder powder = new Powder();
ThreeDPrinter3 printer = new ThreeDPrinter3();
printer.setMaterial(powder);
Powder p = (Powder)printer.getMaterial();
// ThreeDPrinter3의 경우는 Object type을 이용하여 material을 만들었는데
// 이럴 경우 형 변환을 해줘야해서 번거로움이 발생한다.
// 그래서 generic programming이 생겨났다.
}
}
※その他のコードは上記と重複省略Tデータ型の範囲制限
親クラスをGeneric classに継承する場合、Tは継承クラス(データ型)しか生成できません.
継承を受け入れない場合、TはObjectに変換され、Objectクラスに組み込まれたメソッドのみが使用されます.
extendsを使用すると、使用可能なクラスを制限し、一般的なメソッドを指定できます.
👨🏻💻 Example Code
Material.java
package ch07;
//Generic class의 제한을 걸기 위한 class로
//해당 class는 직접 쓸 일이 없기에 abstract로 생성하였다.
public abstract class Material {
public abstract void doPrinting();
}
Plasticpackage ch07;
public class Plastic extends Material {
public String toString() {
return "재료는 plastic 입니다. ";
}
@Override
public void doPrinting() {
// TODO Auto-generated method stub
}
}
GenericPrinterpackage ch07;
public class GenericPrinter<T extends Material> {
// extends Material을 하여 T에 대한 제한을 하였다.
// Material을 상속받은 Class(자료형)으로만 생성 가능하다!!
private T material;
// 나중에 사용할 때 사용할 자료형을 입력하면 해당 자료형으로 생성된다.
public T getMaterial() {
return material;
}
public void setMaterial(T material) {
this.material = material;
}
public String toString() {
return material.toString();
}
}
※その他のコードは上記と重複省略Reference
Reference
この問題について([Java]Generic Programming(Generic Programming)), 我々は、より多くの情報をここで見つけました https://velog.io/@seongwon97/Java-Generic-Programming-제너릭-프로그래밍テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol