제네릭 클래스를 만드는 방법
class 클래스명<제네릭타입글자>{
제네릭타입글자 변수명; 변수 선언에 제네릭을 사용한 경우
제네릭타입글자 메서드명(매개변수들){
메서드의 반환값에 제네릭을 사용한 경우
return 값;
}
반환값타입 메서드명(제네릭타입글자 변수명){
메서드의 매개변수에 제네릭을 사용한 경우
return 값;
}
}
[제네릭 클래스]
class MyGeneric<T>{ // MyGeneric<T,V,E>
제네릭 여러개 지정도 가넝한 but굳이 잘안씀
private T val;
public void setVal(T val){
this.val = val;
}
public T getVal(){
return val;
}
}
[Non제네릭 클래스]
class NonGeneric{
private Object val; //멤버변수
public void setVal(Object val){
this.val = val;
}
public Object getVal(){
return val;
}
}
제네릭을 지정한 클래스의 인스턴스를 사용할때와
제네릭을 지정하지 않은 클래스의 인스턴스를 main메서드에서 사용해보자
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);
Integer rtnNg2 = (Integer)ng2.getVal();
//int rtnNg2 = (int)ng2.getVal(); 오토 언박싱 일어나서 int로 써도됨
System.out.println("정수형 반환값: "+ rtnNg2);
System.out.println();
/*
NonGeneric ng3 = new NonGeneric();
ng3.setVal("홍길동");
Integer rtnNg3 = (Integer)ng3.getVal(); // 실행시 오류.
System.out.println("ng3: "+ rtnNg3);
*/
System.out.println("-----------------------------");
/* 제네릭 클래스의 인스턴스 사용 */
MyGeneric<String> mg1 = new MyGeneric<>();
MyGeneric<Integer> mg2 = new MyGeneric<>();
mg1.setVal("우리나라");
mg2.setVal(500);
String rtnMg1 = mg1.getVal();
System.out.println(rtnMg1);
int rtnMg2 = mg2.getVal();
System.out.println(rtnMg2);
//int test = mg1.getVal(); 바로 에러나서 에러를 찾기 쉽다.
}