제너릭(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의 타입을 통일시키기 위함이다.
'language > java' 카테고리의 다른 글
java Varags 가변인수 사용 예문 (0) | 2013.10.17 |
---|---|
java Enum 열거형 사용 (0) | 2013.10.17 |
java Vector 벡터의 add()메서드와 addElement()메서드 (0) | 2013.10.17 |
java null은 Object객체다 (0) | 2013.10.17 |
java 자바 API , 한글번역 API (0) | 2013.10.16 |