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

조수경·2021년 11월 4일
0

고급자바

목록 보기
18/97

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

  형식)
  class 클래스명 <제네릭타입글자>{
       //<제네릭타입글자>: 영문자 한글자로 주로 사용
      제네릭타입글자 변수명;   //변수 선언에 제네릭을 사용한 경우
      ...
      제네릭타입글자 메서드명(메개변수들...){  
      //메서드의 반환값에 있는 메서드에 제네릭을 사용한 경우
      ...
      
      return 값;
     }
  }
  
  반환값타입 메서드명(제네릭타입글자 변수명){ 
  //메서드의 매개변수에 제네릭을 사용한 경우
   ...
   return 값;
  }
 
package kr.or.didt.basic.generic;


class MyGeneric<T>{
//<T,V,E>제네릭 여러개 넣기 가능 ,하지만 객체 생성시 갯수도 맞춰 줘야함
	private T val;
	
	public void setVal(T val){//메서드의 매개변수에 제네릭 사용
		this.val = val;
	}
	public T getVal(){//메서드 변수명에 사용
		return val;
	}
}



class NonGeneric{
	//아무 객체나 저장하고 싶은 클래스를 만들고시퍼
	private Object val;
	
	public void setVal(Object val){
        //(부모)가나다라 문자열이 들어감
		this.val = val;
	}
	public Object getVal(){
		return val;
	}
}



public class 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);
        
        Integer rtnNg2 = (Integer)ng2.getVal();
        //인티저(자식)에 부모를 넣어야 되서 형변환해야함
        //Integer말고 Int라고 작성가능 // 박싱되어 있는것을 언박싱 하는 작업
        System.out.println("정수형 반환값 : "+ rtnNg2);
        System.out.println();
        
        /*
        NonGeneric ng3 = new NonGeneric();
        ng3.setVal("홍길동");
        
        Integer rtnNg3 = (Integer)ng3.getVal();
        System.out.println("ng3 ==>"+rtnNg3);
        //문자를 넣었는데 데이터를 꺼내온 데이터와 다른 문자형인것을 체크 하지 못함
        //문자열로 넣었지만 non은 object라서 다른 객체로 형변환해서 집어 넣을수 있다.
        //하지만 실행을 해보면 오류가 뜸(컴파일은 에러 안뜸)*/
        
        System.out.println("-----------------------------");
        
        MyGeneric<String> mg1 = new MyGeneric<>(); 
        //T자리의 값을 String변수로 치환해서 반환하는 것
        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(); 
        // 에러: 잘못쓴 내용을 빨리 찾을 수 있음
        
	}

}

오토박싱 : int 라는 기본형을 래퍼클래스의 integer 형으로 자동으로 바꿔주는것

반대는 언박싱 이라고 한다.

profile
신입 개발자 입니다!!!

0개의 댓글

관련 채용 정보