Generic 사용하기..*^^*

개발 이야기/Java | 2008. 1. 23. 17:26
Posted by 시반

JDK 1.5부터 Gerneric라는 개념이 추가되었습니다.

 

이전에는 Collection 객체에 데이터를 넣고 뺄때 Object 타입을 사용했었죠..

즉 Collection 객체에 넣었을 때의 타입으로 캐스팅을 해서 사용합니다.

 

ArrayList list = new ArrayList();

list.add("test");

String value = (String)list.get(0);   // 꺼낼때 캐스팅 해야함.

 

하지만 Generic이라는 개념이 도입되면서 조금 바뀌게 되었네요.

type을 명확하게 정하지 않고도 type을 처리할 수 있는 C++의 템플릿과 비슷한 기능으로 사용법은 비슷합니만

다른 점은 <> 사이에 들어가는 type의 수만큼 class를 만드는 C++과는 달리 java에서는

하나의 class로 여러 type들을 처리합니다

 

실제로 collection 객체를 사용할때 하나의 객체에 서로 다른 타입을 넣어서 사용할 때는 잘 없습니다.

주로 한가지 타입의 객체만을 넣어서 사용합니다.

이때 실수로 다른것 넣을 수도 있습니다. 이런 부분은 컴파일 시에는 잡히지고 않고 실행시에만 발견 됩니다.

 

하지만 Generic 을 사용함으로써 컴파일시에 오류를 잡을 수 있으므로 더욱 견고한 코드를 만들 수 있겠져

이렇게 Generic를 사용하는 첫번째 이유는 생성시 사용할 타입을 지정할 수 있으므로 다른 타입의

객체를 실수로 사용하는것을 컴파일타임에 방지할 수 있다는 점에 있습니다

 

 ArrayList<String> list = new ArrayList<String>();
 list.add("1");
 list.add("2");
 String value = list.get(0);            

 

 

위의 예에서  list엔 String만이 들어갈것을 선언하였기에 값을 집어넣을때도 String형만을 넣을수 있습니다.

반대로 꺼낼때는 String형으로 반환됩니다.

즉  반환타입이 지정되어 있기 때문에 이전과는 달리 꺼낼때 캐스팅이 필요 없다는 겁니다.

 

 

이렇게 Collection에서 객체를 꺼낼때 캐스팅 없이 꺼낼수 있다는 점이 Generic을 사용하는 또하나의 장점이 될 수 있겠죠.

 

Generic을 쓰는 또하나의 이유는 Auto Boxing과 Auto UnBoxing일겁니다

자바는 객체지향언어이지만 기본타입들은 객체가 아닙니다. 그래서 이들에 대한 Wrapper클래스들을 자바에서는 제공하고 있습니다.

 

int num1 = 1;


Integer num2 = new Integer("2");

int num = num1+num2.intValue();

 

 

기존의 경우 기본타입을 객체로 사용하기 위해서 wrapper class에 담고 이후에


다시 기본형값을 사용하고자 할때는 wrapper Class에서 그 값을 반환하는 작업이 필요했지만

5.0 이후부터는 이러한 부분이 자동으로 이루어진다는 점(조아조아)

 


int num1 = 1;


Integer num2 = 2;      //auto Boxing

int num = num1+num2; //auto UnBoxing

 


Generic과 관련해보면


  
HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("1", new Integer(1));
map.put("2", 2);            // auto boxing
 
Integer i = map.get("1");   // 따로 캐스팅이 필요 없다.
int j = map.get("2");       // auto unboxing


이렇게 별도의 캐스팅 없이 처리할 수 있다는 점에서 좋아졌네요..

 


 

 
블로그 이미지

시반

시반(詩伴)이란 함께 시를 짓는 벗이란 뜻을 가지고 있습니다. 함께 나눌수 있는 그런 공간이길 바라며...

카테고리

분류 전체보기 (233)
개발 이야기 (73)
WEB2.0 (57)
DB2 (24)
MySQL (6)
오라클 (26)
기타 (44)
취미 (0)
잡담 (2)