Super Coding Addict
Ch11. 컬렉션 프레임 워크 - 제네릭 프로그래밍 본문
* 제네릭 프로그래밍
- 변수의 선언이나 메서드의 매개변수를 하나의 참조 자료형이 아닌 여러 자료형으로 변환할 수 있도록 하는 프로그래밍
- 실제 사용되는 참조 자료형으로의 변환은 컴파일러가 검증하므로 안정적인 프로그래밍 방식
=> 자료형 매개변수
* <T extends 클래스>
- T 대신에 사용될 자료형을 '제한'하기 위해 사용
* 제네릭 메서드
- 메서드의 매개 변수를 자료형 매개 변수로 사용하는 메서드
- 일반 클래스에서도 사용 가능
- 메서드 내의 자료형 매개변수는 지역변수처럼 메서드 내에서만 유효
- 예제
# GenericPrinter
=> 3D프린터, 재료는 Plastic이나 Powder
package ch11.generic;
public abstract class Material {
public abstract void doPrinting();
}
--> 3D프린터의 재료로 아무거나 쓸 수 없도록 제한을 하기 위해 만든 material(재료) 추상클래스
--> 이 클래스를 상속받는 재료클래스는 doPrinting() 추상메서드를 implements
package ch11.generic;
public class Plastic extends Material{
public String toString() {
return "재료는 Plastic 입니다";
}
@Override
public void doPrinting() {
System.out.println("Plastic으로 프린팅 합니다");
}
}
--> Plastic 클래스는 Material 클래스 상속
package ch11.generic;
public class Powder extends Material{
public String toString() {
return "재료는 Powder 입니다";
}
@Override
public void doPrinting() {
System.out.println("Powder로 프린팅 합니다");
}
}
--> Powder 클래스는 Material 클래스 상속
package ch11.generic;
public class GenericPrinter<T extends Material>{
private T material;
public T getMaterial() {
return material;
}
public void setMaterial(T material) {
this.material = material;
}
public String toString() {
return material.toString();
}
public void printing() {
material.doPrinting();
}
}
--> 자료형 매개변수 T는 Material을 상속
package ch11.generic;
public class GenericPrinterTest {
public static void main(String[] args) {
GenericPrinter<Powder> powderPrinter = new GenericPrinter<>();
Powder powder = new Powder();
powderPrinter.setMaterial(powder);
System.out.println(powderPrinter);
GenericPrinter<Plastic> plasticPrinter = new GenericPrinter<>();
Plastic plastic = new Plastic();
plasticPrinter.setMaterial(plastic);
System.out.println(plasticPrinter);
powderPrinter.printing();
plasticPrinter.printing();
GenericPrinter printer = new GenericPrinter(); //Object로 취급
}
}
--> 제네릭 클래스로 인스턴스를 만들 때에는 자료형 매개변수 T에 해당하는 클래스 객체를 생성한 뒤 setter로 넣어줌
'JAVA 문법' 카테고리의 다른 글
Ch08. 추상 클래스(2) - 추상 클래스 응용 [템플릿 메서드] (0) | 2021.03.06 |
---|---|
Ch8. 추상 클래스 (1) (0) | 2021.03.06 |
Ch10. 자바 기본 클래스 (6) - String, Wrapper 클래스 (0) | 2021.03.03 |
Ch10. 자바 기본 클래스 (5) - 코딩해보기 (0) | 2021.03.02 |
Ch10. 자바 기본 클래스 (4) - Class 클래스 (0) | 2021.03.01 |