제네릭이락 클래스 내부에 사용할 데이터 타입을 <>를 통해서 지정이 가능하다.
// 1.제네릭은 클래스 또는 메서드에 사용 가능
//<> 안에 들어가야 할 타입을 명시에 String을 지정 하면
public class Generic<T> {
// 2. 내부 필드에 String으로 지정
private T t;
// 3. method의 return type도 String이 된다.
public T get() {
return this.t;
}
//메서드 T도 String으로 지정
public void set(T t) {
this.t = t;
}
public static void main(String[] args) {
// 4.
Generic<String> stringGeneric = new Generic<>();
// 5.
stringGeneric.set("Hello World");
String tValueTurnOutWithString = stringGeneric.get();
System.out.println(tValueTurnOutWithString);
}
}
제네릭은 static 맴버에 사용 할수 없습니다.
static T get() { ... } // 에러
static void set(T t) { ... } // 에러
제네릭에서 타입 매개변수를 지정할때 원시형 변수(int,double,float등)으로 지정이 되지 않고 오직 참조형 타입의 객채이다(Class,Integer,Double등)
제네릭은 타입 매개 변수를 지정 할때 한개만 사용할수 있는게 아니라 여래개의 타입 지정이 가능하다.
public class Generic<T, U, E> {
public E multiTypeMethod(T t, U u) { ... }
}
Generic<Long, Integer, String> instance = new Generic();
instance.multiTypeMethod(longVal, intVal);
제네릭은 extends를 통해서 제한 타입을 둘수가 있다. <T extends [제한타입]> 이런 형식으로 지정을 할수 있고 예를 들어 제한 타입에 Number를 지정 하면Number와 그 하위클래스(Integer,Double)들만 받도록 타입을 제한 할수 있다.<T extends [제한타입] &[제한타입]>과 같이 다중 제한 타입을 둘수도 있다.
제네릭 메서드
제네릭 메서드란 메서드의 선언부에 <>가 선언된 메서드를 말한다.
일반적으로 제네릭클래스에서 제네릭을 받아와 타입을 설정을 할수 있지만.
제네릭 메서드는 통적으로 타입을 받아와 독립적으로 운용이 가능한 것이다.
class FruitBox<T> {
// 클래스의 타입 파라미터를 받아와 사용하는 일반 메서드
public T addBox(T x, T y) {
// ...
}
// 독립적으로 타입 할당 운영되는 제네릭 메서드
public static <T> T addBoxStatic(T x, T y) {
// ...
}
}
제네릭의 와일드 카드
<?> : 제한 없음
<? super T> : T와 그 조상들만 가능
<? extends T> : T와 그 자손들만 사용 가능
참고 문헌 및 내용 출처 : https://inpa.tistory.com/entry/JAVA-☕-제네릭Generics-개념-문법-정복하기 [Inpa Dev 👨💻:티스토리]