* class 클래스명<제너릭타입글자> { //컴파일 시점까지 제너릭타입을 알려줘야한다.
* 제너릭타입글자 변수명; // 변수선언에 제너릭을 사용할 경우
* ...
* 제너릭타입글자 메서드명() {//반환값이 있는 메서드에서 사용
* ...
*
* return 값;
* }
* ...
* }
T => Type
K => Key
V => Value
E => Element(자료구조에 들어가는 항목들을 나타낼 때 사용)
Eclipse Oxygen T02_GenericTest
일반 클래스
class NonGeneric{ // 일반 클래스
private Object val; // 다 때려넣을 수 있다. 단, 형변환 해야한다.
public Object getVal() {
return val;
}
public void setVal(Object val) {
this.val = val;
}
}
class MyGeneric<T>{ // 클래스명 다음에 제너릭 타입글자
private T val; //T가 String이 될지 Integer가 될지 어떤타입이 될지 모른다.
//내가 사용할 타입(딱 한개)을 지정할 수 있다.
public T getVal() {
return val;
}
public void setVal(T val) {
this.val = val;
}
}
<T>
타입을 정해줘야 한다 (아래 예시)public class T02_GenericTest {
public static void main(String[] args) {
NonGeneric ng1 = new NonGeneric();
ng1.setVal("가나다라");
NonGeneric ng2 = new NonGeneric();
ng2.setVal(100);
String rtnNg1 = (String)ng1.getVal();
System.out.println("문자열 반환값 rtnNg1 =>"+rtnNg1);
Integer irtnNg2 = (Integer)ng2.getVal();
System.out.println("정수 반환값 itrNg2 =>"+ irtnNg2);
System.out.println();
// 사용할 시점에 <>안에 타입을 정해줘야 한다.
//MyGeneric<T> class에서 미지정 타입<T>를 String타입으로 지정
MyGeneric<String> mg1 = new MyGeneric<String>();
//MyGeneric<T> class에서 미지정 타입<T>를 Integer타입으로 지정
MyGeneric<Integer> mg2 = new MyGeneric<>(); //T가 Integer
mg1.setVal("우리나라");
mg2.setVal(500);
rtnNg1 = mg1.getVal();
irtnNg2 = mg2.getVal();
System.out.println("제너릭 문자열 반환값 : "+rtnNg1); //우리나라
System.out.println("제너릭 정수형 반환값 : "+irtnNg2); //500
}
}
public class 클래스명<T>{ ... }
public interface 인터페이스명<T>{...}