컴퓨터공학 💻 도서관📚
Part2. 5-8 <T extends 클래스> 사용하기 본문
generic type를 쓰게 되면 t 라는 위치에 어느 자료형이든 들어가도 상관이 없는데 그렇게 되는 경우에 또 문제가 발생할 수 있다.
그래서 type 에 대한 어떤 제한을 두기 위해 extends 상속을 이용한다. (아무거나 막 못 쓰게 하는 기능)
이 클래스에서 상속받은 클래스만 T 대신에 쓸 수 있다. 라는 의미이다.
상위 클래스의 필요성
- T 자료형의 범위를 제한 할 수 있음
- 상위 클래스에서 선언하거나 정의하는 메서드를 활용할 수 있음
- 상속을 받지 않는 경우 T는 Object로 변환되어 Object 클래스가 기본으로 제공하는 메서드만 사용가능
T extends 를 사용한 프로그래밍
- GenericPrinter 에 material 변수의 자료형을 상속받아 구현
- T에 무작위 클래스가 들어갈 수 없게 Material 클래스를 상속받은 클래스로 한정
public abstract class Material { // 추상 클래스(이 클래스를 직접 쓸 일은 없기에 이렇게 한다.)
public abstract void doPrinting(); // T가(재료들이) 공통으로 쓸 메서드 선언
}
public class Powder extends Material{ // Material 클래스를 상속
public void doPrinting() {
System.out.println("Powder 재료로 출력합니다");
}
public String toString() {
return "재료는 Powder 입니다";
}
}
public class Plastic extends Material{ // Material 클래스를 상속
public void doPrinting() {
System.out.println("Plastic 재료로 출력합니다");
}
public String toString() {
return "재료는 Plastic 입니다";
}
}
// Material클래스에서 상속받은 클래스만 T 대신에 쓸 수 있다
public class GenericPrinter<T extends Material> { // <T extedns Material>
private T material;
public void setMaterial(T material) {
this.material = material;
}
public T getMaterial() {
return material;
}
public String toString(){
return material.toString();
}
public void printing() {
material.doPrinting();
}
}
public class GenericPrinterTest {
public static void main(String[] args) {
GenericPrinter<Powder> powderPrinter = new GenericPrinter<Powder>();
powderPrinter.setMaterial(new Powder());
Powder powder = powderPrinter.getMaterial(); // 형변환 하지 않음
System.out.println(powderPrinter);
GenericPrinter<Plastic> plasticPrinter = new GenericPrinter<Plastic>();
plasticPrinter.setMaterial(new Plastic());
Plastic plastic = plasticPrinter.getMaterial(); // 형변환 하지 않음
System.out.println(plasticPrinter);
/* GenericPrinter powderPrinter2 = new GenericPrinter(); // <> 자료형 생략하면 Object로 인지
powderPrinter2.setMaterial(new Powder());
Powder powder = (Powder)powderPrinter.getMaterial(); // 형변환 해줘야 함
System.out.println(powderPrinter);
*/
//GenericPrinter<Water> printer = new GenericPrinter<Water>(); 제한 걸려서 water는 못씀
}
}
'✅🌲강의 복습 노트 > 패캠 JavaSpring 강의,코드 복습' 카테고리의 다른 글
Part2. 5-10 자바에서 제공되는 자료구조 구현 클래스들 - 컬렉션 프레임워크 (1) | 2025.06.26 |
---|---|
Part2. 5-9 제네릭 메서드 활용하기 (0) | 2025.06.26 |
Part2. 5-7 무엇이든 담을 수 있는 제네릭(Generic) 프로그래밍 (0) | 2025.06.24 |
Part2. 5-6 큐(Queue) 구현하기 (0) | 2025.06.23 |
Part2. 5-5 스택(Stack) 구현하기 (0) | 2025.06.23 |
Comments