무엇이든 담을 수 있는 제네릭
제네릭 자료형 정의
-클래스에서 사용하는 변수의 자료형이 여러개일 수 있고, 그 기능(메서드)이 동일한 경우 클래스의 자료형을 특정하지 않고 추후 해당 클래스를 사용할 수 있게 선언
-컬렉션 프레임워크에서 사용 됨
제네릭 타입을 사용하지 않는 예제
-재료가 powder인 경우
public class ThreeDPrinter1
{
private Powder material;
public void setMaterial(Powder material)
{
this.material = material;
}
public Powder getMaterial()
{
return material;
}
}
-재료가 Plastic인 경우
public class ThreeDPrinter2
{
private Plastic material;
public Plastic getMaterial()
{
return material;
}
public void setMaterial(Plastic material)
{
this.material = material;
}
}
-여러 타입을 대체하기 위해 Object를 사용할 수 있음
public class ThreeDPrinter
{
private Object material;
public Plastic getMaterial()
{
return material;
}
public void setMaterial(Object material)
{
this.material = material;
}
}
-Object를 사용하는 경우 형 변환을 해야 함
ThreeDPrinter printer = new ThreeDPrinter();
Powder powder = new Powder();
printer.setMaterial(powder);
Powder p = (Powder)printer.getMaterial();
-제네릭 클래스 정의
public class GenericPrinter<T> {
private T material;
public T getMaterial() {
return material;
}
public void setMaterial(T material) {
this.material = material;
}
public String toSting()
{
return material.toString();
}
}
자료형 매개변수 T
-이 클래스를 사용하는 시점에 실제 사용할 자료형을 지정
-static 변수는 사용할 수 없음
GenericPrinter : 제네릭 자료형
E : element,
K : key,
V : value 등 여러 의미에 따라 사용 가능
제네릭 클래스 사용하기
Powder.java
public class Powder {
public String toString()
{
return "재료는 Powder입니다.";
}
}
Plastic.java
public class Plastic {
public String toString()
{
return "재료는 Plastic입니다.";
}
}
GenericPrinter.java
public class GenericPrinter<T> {
private T material; // T 자료형으로 선언한 변수
public T getMaterial() { // T 자료형을 반환하는 제네릭 메서드
return material;
}
public void setMaterial(T material) {
this.material = material;
}
public String toSting()
{
return material.toString();
}
}
GenericPrinterTest.java
public class GenericPrinterTest {
public static void main(String[] args) {
GenericPrinter<Powder> powderPrinter = new GenericPrinter<Powder>();
powderPrinter.setMaterial(new Powder());
System.out.println(powderPrinter);
GenericPrinter<Plastic> plasticPrinter = new GenericPrinter<Plastic>();
plasticPrinter.setMaterial(new Plastic());
System.out.println(plasticPrinter);
}
}
다이아몬드 연산자 <>
ArrayList list = new ArrayList<>(); // 다이아몬드 연산자 내부에서 자료형은 생략 가능
'Java > 패스트캠퍼스' 카테고리의 다른 글
I/O 스트림 (0) | 2022.06.14 |
---|---|
스트림 & 예제 (0) | 2022.06.14 |
Map 인터페이스 구현 클래스 (0) | 2022.06.12 |
Set 인터페이스 구현 클래스 (0) | 2022.06.12 |
Iterator (0) | 2022.06.11 |