제네릭 프로그래밍이랑 변수의 선언이나 매서드의 매개변수를 하나의 참조 자료형이 아닌 여러 자료형을 변환 될 수 있도록 프로그래밍 하는 방식이다. 실제 사용되는 참조 자료형으로의 변환은 컴파일러가 검증하기 때문에 안정적인 프로그래밍 방식이라 할 수 있다.
예를 들어 프린터 객체를 만든다고 하자
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
public class GenericPrinter<T extends Meterial> { //상위클래스 Metrial에 상속받은 클래스만 사용할 수 있도록 제한을 둠
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();
}
}
|
cs |

상속구조가 이렇게 되어있다고 가정하면 위의 코드는 Powder,Plastic클래스(Material은 추상클래스) 외에 다른 클래스는 GenericPrinter의 참조 자료형으로 사용할 수 없다.
테스트 클래스
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
public class GenericPrinterTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
GenericPrinter<Powder> powderPrinter = new GenericPrinter<Powder>();
Powder powder = new Powder();
powderPrinter.setMaterial(powder);
System.out.println(powderPrinter);
GenericPrinter<Plastic> plasticPrinter = new GenericPrinter<Plastic>();
Plastic plastic = new Plastic();
plasticPrinter.setMaterial(plastic);
System.out.println(powderPrinter);
powderPrinter.printing();
plasticPrinter.printing();
GenericPrinter printer = new GenericPrinter(); // 제네릭을 안쓰고도 호출할수있지만 그렇게 사용하지않음
}
}
|
cs |
Material클래스
1
2
3
4
5
|
public abstract class Meterial {
public abstract void doPrinting();
}
|
cs |
Platstic 클래스
1
2
3
4
5
6
7
8
9
10
11
12
|
public class Plastic extends Meterial{
public String toString() {
return "재료는 플라스틱입니다.";
}
@Override
public void doPrinting() {
System.out.println("플라스틱 프린팅 시작");
}
}
|
cs |
Powder클래스
1
2
3
4
5
6
7
8
9
10
11
12
13
|
public class Powder extends Meterial {
public String toString() {
return "재료는 파우더입니다.";
}
@Override
public void doPrinting() {
System.out.println("파우더 프린팅 시작");
}
}
|
cs |
Water클래스 (Material에 상속되어 있지 않기 때문에 GenericPrinter에서 사용할 수 없다.)
1
2
3
4
5
|
public class Water {
public String toString() {
return "재료는 물입니다.";
}
}
|
cs |
'IT > Java' 카테고리의 다른 글
컬렉션 프레임워크 05-1 Set인터페이스 (0) | 2020.01.09 |
---|---|
컬렉션 프레임워크04-스택,큐 구현 (0) | 2020.01.08 |
컬렉션 프레임워크03 List 인터페이스 (1) | 2020.01.08 |
컬렉션프레임워크02-컬렉션 프레임워크란? (0) | 2020.01.08 |
Object 클래스 정리 (0) | 2019.12.31 |