제네릭 자료형 정의
- 클래스에서 사용하는 변수의 자료형이 여러 개 일 수 있고, 그 기능(메서드)은 동일한 경우 클래스의 자료형을 특정하지 않고 추후 해당 클래스를 사용할 때 지정할 수 있도록 선언
- 실제 사용되는 자료형의 변환은 컴파일러에 의해 검증되므로 안정적인 프로그래밍 방식
- 컬렉션 프레임워크에서 많이 사용되고 있음
제네릭 타입을 사용하지 않는 경우의 예
- ThreeDPrinter1.java(재료가 powder인 경우)
public class ThreeDPrinter1 {
private Powder material;
public Powder getMaterial() {
return material;
}
public void setMaterial(Powder material) {
this.material = material;
}
public String toString() {
return "재료는 파우더입니다.";
}
}
- ThreeDPrinter2.java(재료가 plastic인 경우)
public class TreeDPrinter2 {
private Plastic material;
public Plastic getMaterial() {
return material;
}
public void setMaterial(Plastic material) {
this.material = material;
}
public String toString() {
return "재료는 플라스틱입니다.";
}
}
제네릭 타입을 사용한 경우
- GenericPrinter.java
public class GenericPrinter<T> {
private T material;
public void setMaterial(T material) {
this.material = material;
}
public T getMaterial() {
return material;
}
public String toString() {
return material.toString();
}
}
- GenericTest.java
public class GenericTest {
public static void main(String[] args) {
Powder powder = new Powder();
GenericPrinter<Powder> powderPrinter = new GenericPrinter<>();
powderPrinter.setMaterial(powder);
System.out.println(powderPrinter.toString());
Plastic plastic = new Plastic();
GenericPrinter<Plastic> plasticPrinter = new GenericPrinter<>();
plasticPrinter.setMaterial(plastic);
System.out.println(plasticPrinter.toString());
}
}
- 자료형 매개변수 T(type parameter) : 이 클래스를 사용하는 시점에 실제 사용할 자료형을 지정, static 변수는 사용할 수 없음
- GenericPrinter : 제네릭 자료형
- E : element, K : key, V : value 등 여러 알파벳을 의미에 따라 사용 가능
다이아몬드 연산자 <>
- <>를 다이아몬드 연산자라고 함
- ArrayList list = new ArrayList<>(); // 다이아몬드 연산자 내부에서 자료형은 생략가능 함
- 제네릭에서 자료형 추론 (자바 10부터)
ArrayList list = new ArrayList() => var list = new ArrayList();
'프로그래밍 언어 > JAVA(자바) 응용' 카테고리의 다른 글
42.제네릭 메서드 활용 (0) | 2022.05.30 |
---|---|
41.T extends 클래스 (0) | 2022.05.27 |
39.Class 클래스 (0) | 2022.05.26 |
38.String, StringBuilder, StringBuffer 클래스, text block (0) | 2022.05.25 |
37.Object 클래스의 메서드 활용 (0) | 2022.05.25 |
댓글