is Data.

java Generic 제너릭 사용 예시


제너릭(Generic)은 자바 1.5부터 추가된 기능이다.
제너릭은 클래스에 사용할 타입을 클래스 생성시 지정하는 것이 아닌 사용시 지정하 수 있도록 임의의 타입을 지정하는 것을 말한다. 

 

public class TestGeneric {
      
      public static void main(String[] args) {
            
            /*
             * 같은 Output 클래스를 사용하지만 다른 제너릭을 사용하는 두 객체는
             * 각자의 데이터타입으로 set / out 하여 원하는 값을 얻을 수 있다.
             * 제너릭을 사용하면 사용시에 데이터타입을 정의할 수 있다.
             */
            
            Output<String> so = new Output<String>(); // 제너릭 G 를 String으로 사용.
            so.setData("string");
            System.out.println(so.getData());                     
            
            Output<Integer> io = new Output<Integer>();   // 제너릭 G 를 Integer로 사용.
            io.setData(99);
//          io.setData("문자열"); //error
            System.out.println(io.getData());
            
            // 복잡한 캐스팅을 하지 않을 수 있다.
      }


}


/**
 * Generic을 사용하여 클래스 디자인시점엔 알 수 없는 G형의 타입을 정의하고,
 * 객체 사용시 타입을 설정하여 사용한다.
 * 업캐스팅의 장점을 활용한 것. 자바 5.0부터 지원.
 *
 */
class Output<G> {                   // 제네릭 G 형으로 클래스 생성
      private G data = null;        // data변수의 형을 제네릭 G로 지정
      
      protected void setData(G data){ // G 형의 data를 받아와 멤버의 값을 지정하는 세터 메서드
            this.data = data;
      }
      
      protected G getData(){
            return this.data;       // G 형의 data를 반환
      }

}

 

위 Output<G> 클래스에서 제너릭 G 타입으로 클래스를 생성했고 하위 멤버들도 G 타입을 사용하고 있다.

이 G타입은 객체를 사용할 때 지정한 타입을 따라서 자동으로 변경되어 적용된다고 볼 수 있다.

 

이러한 제너릭(Generic)의 사용목적은 return 타입을 일관성있게 유지하여 casting 오류를 범하지 않도록 유도하고,

Collection들의 값 또는 key의 타입을 통일시키기 위함이다.