제너릭(Generic) 프로그래밍
- 변수의 선언이나 메서드의 매개변수를 하나의 참조 자료형이 아닌
여러 자료형을 변환 될 수 있도록 프로그래밍 하는 방식
- 실제 사용되는 참조 자료형으로의 변환은 컴파일러가 검증하므로
안정적인 프로그래밍 방식
- 컬렉션 프레임워크에서 많이 사용되고 있음
제너릭 클래스 정의 하기
- 여러 참조 자료형으로 대체 될 수 있는 부분을 하나의 문자로 표현
- 이 문자를 자료형 매개변수라 함
public class GenericPrinter <T> { //제너릭 클래스. T는 type의 약자, 자료형 매개변수임
private T material;
public void setMaterial(T material){
this.material = material;
}
public T getMaterial(){
return material;
}
}
자료형 매개 변수 T
- type의 의미로 T를 많이 사용
- <T>에서 <>는 다이아몬드 연산자
- static 키워드는 T에 사용할 수 없음
- ArrayList<String>list = new ArrayList<>();
다이아몬드 연산자 내부에서 자료형은 생략 가능
- 제너릭에서 자료형 추론(자바10부터)
ArrayList<String> list = new ArrayList<String>();
// 아래와 같이 가능
var list = new ArrayList<String>();
제너릭 클래스 사용하기
GenericPrinter<Power> powderPrinter = new GenericPrinter<Power>();
powderPrinter.setMaterial(new Powder());
Powder powder = powderPrinter.getMaterial(); // 명시적 형변환 X
T로 정의한 부분에서 사용할 참조 자료형을 넣어서 클래스 생성
getMaterial() 메서드가 호출될 때 따라 강제 형변환 하지 않아도 됨
용어 | 설명 |
GenericPrinter<Powder> | 제너릭 자료형, 매개변수화된 자료형 |
Powder | 대입된 자료형 |
제너릭에서 대입된 자료형을 명시하지 않는 경우
- GenericPrinter<powder>와 같이 사용할 자료형을 명시해야함
- 자료형을 명시하지 않고 사용할 수 있음
👉 이런 경우 자료형을 명시하라는 경고가 나타남
- 반환 형에 따라 강제 형 변환을 해야 함
<T extends 클래스>
material
⬆️ ⬆️
Powder Plastic
- T가 사용될 클래스를 제한하기 위해 사용
- Material에서 상속받지 않은 Water와 같은 클래스는 프린터 재료로 사용할 수 없음
- Material에 정의된 메서드 공유 가능
제너릭 메서드 활용하기
- 메서드의 매개변수를 자료형 매개변수로 사용하는 경우
- 자료형 매개 변수가 하나 이상인 경우
public<자료형 매개변수> 반환형 메서드이름(자료형 매개변수 ...){ } //제너릭 메서드의 일반 형식
'JAVA' 카테고리의 다른 글
ep 07.문제 풀이 (0) | 2022.12.19 |
---|---|
ep 07. 기본 클래스 (0) | 2022.12.19 |
ep 06-2.문제 풀이 (0) | 2022.12.11 |
ep 06-1. Interface (0) | 2022.12.11 |
ep 05-2. 문제 풀이 (0) | 2022.12.02 |