[Java] 제네릭 클래스

고동이의 IT·2021년 11월 4일
0

Java

목록 보기
19/37
post-thumbnail

제네릭 클래스를 만드는 방법

형식)

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(); 바로 에러나서 에러를 찾기 쉽다.
}
profile
삐약..뺙뺙

0개의 댓글