Generic 사용하기..*^^*
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
이렇게 별도의 캐스팅 없이 처리할 수 있다는 점에서 좋아졌네요..
'개발 이야기 > Java' 카테고리의 다른 글
SVN 서버 설치 및 거북이(Tortoise) SVN 설치하기 (0) | 2008.03.13 |
---|---|
@Override 사용하기 (0) | 2008.01.24 |
jxl을 통한 엑셀 저장하기 (0) | 2008.01.16 |
JAVA API Chm파일 다운로드 링크 (0) | 2007.12.21 |
[JBoss 보안] DataSource 패스워드 암호화 (0) | 2007.06.26 |