Do It Java Day26
컬렉션 프레임워크1
1. 제네릭 클래스
- 변수의 선언, 메서드의 매개변수를 하나의 참조 자료형이 아닌 여러 자료형으로 변환될 수 있도록 프로그래밍하는 것
- 실제 사용되는 참조 자료형으로의 변환은 컴파일러가 검증하므로 안정적인 프로그래밍 방식
- 컬렉션 프레임워크에서 많이 사용
2. 제네릭 클래스 정의하기
-
여러 참조 자료형으로 대체될 수 있는 부분(매개 변수)을 하나의 문자로 표현
-
예시
public abstract class Material {
public abstract void doPrinting();
}
//<T extends Material>을 통해 Material 클래스를 상속한 클래스만 제네릭 타입에 입력 가능하도록 제한
public class ThreeDPrinter<T extends Material> {
private T material;
public T getMaterial() {
return material;
}
public void setMaterial(T material) {
this.material = material;
}
@Override
public String toString() {
return material.toString();
}
public void printing() {
material.doPrinting();
}
}
public class Plastic extends Material {
public String toString() {
return "재료는 Plastic입니다.";
}
@Override
public void doPrinting() {
System.out.println("Plastic재료로 출력 중입니다.");
}
}
public class Powder extends Material {
public String toString() {
return "재료는 Powder입니다.";
}
@Override
public void doPrinting() {
System.out.println("Powder재료로 출력 중입니다.");
}
}
public class Water {
public String toString() {
return "재료는 Water입니다.";
}
}
public class ThreeDPrinterTest {
public static void main(String[] args) {
ThreeDPrinter<Powder> printer = new ThreeDPrinter<Powder>();
printer.setMaterial(new Powder());
Powder powder = printer.getMaterial();
System.out.println(printer); //재료는 Powder입니다.
ThreeDPrinter<Plastic> plasticPrinter = new ThreeDPrinter<Plastic>();
plasticPrinter.setMaterial(new Plastic());
Plastic plastic = plasticPrinter.getMaterial();
System.out.println(plasticPrinter); //재료는 Plastic입니다.
// Water 클래스가 Material 클래스를 상속하지 않아 사용 불가
/*
ThreeDPrinter<Water> waterPrinter = new ThreeDPrinter<Water>();
waterPrinter.setMaterial(new Water());
System.out.println(waterPrinter); //재료는 Water입니다.
*/
plasticPrinter.printing(); //Plastic재료로 출력 중입니다.
}
}
3. 자료형 매개변수 T
- type의 의미로 T를 많이 사용한다
-
에서 <>는 다이아몬드 연산자라고 한다 - static 키워드는 T에 사용할 수 없다
- 다이아몬드 연산자 내부에서 자료형은 생략 가능
ArrayList<String> list = new ArrayList<>();
4. 제네릭 메서드 활용하기
- 메서드의 매개변수를 자료형 매개변수로 사용하는 경우
- 자료형 매개 변수가 하나 이상인 경우