제네릭: 결정되지 않은 타입을 파라미터로 처리하고 실제 사용할 때 파라미터를 구체적인 타입으로 대체시키는 기능
만드는 방법
형식
class 클래스명<제너릭타입글자>{
제너릭타입글자 변수명; // 변수선언에 제너릭을 사용하는경우
...
제너릭타입글자 메서드명(){ //반환값이 있는 메서드에 제너릭을 사용하는 경우
...
return 값;
}
}
제너릭타입글자
T => Type
K => Key
V => Value
E => Element
제너릭 클래스 생성
class MyGeneric<T>{//타입여러개 작성가능
//T 때마다 원하는 타입 선언
private T val;
public T getVal() {
return val;
}
public void setVal(T val) {
this.val = val;
}
@Override
public String toString() {
return "MyGeneric [val=" + val + "]";
}
}
객체 생성& 값 넣기
//mg1 객체 생성
MyGeneric<String> mg1 = new MyGeneric<>();
//값 넣기
mg1.setVal("우리나라");
//mg1 객체 생성
MyGeneric<Integer> mg2 = new MyGeneric<>();
//값 넣기
mg2.setVal(200);
class NonGenericClass{
// 타입 Object 지정
private Object val;
//getter setter 지정
public Object getVal() {//값 출력
return val;
}
public void setVal(Object val) { //값 입력
this.val = val;
}
}
객체 생성 & 값 넣음
//객체선언
NonGenericClass ng1 = new NonGenericClass();
ng1.setVal("가나다라"); //값 넣음
//객체선언
NonGenericClass ng2 = new NonGenericClass();
ng2.setVal(100);//값 넣음
Object타입을 강제변환 후 출력
//Object 타입은 강제변환 후 ng1 값 출력
String rtnVal1 = (String) ng1.getVal();
//출력문
System.out.println("정수형 반환값 rtnVal1 =>"+ rtnVal1);
//Object 타입은 강제변환 후 ng1 값 출력
Integer rtnVal2 = (Integer) ng2.getVal();
//출력문
System.out.println("정수형 반환값 rtnVal2 =>"+ rtnVal2);