컴파일 타임 타입 안정성을 제공해준다.
JDK5.0 이전 버전에서는 컬렉션 생성할때 내부에 임의의 값을 줄수 있었다.
이렇게 되면 우리가 특정타입을 제한하고자 할때 어려움이 있으며, 캐스팅을 해서 데이타를
가져와야 한다.
List myList = new ArrayList(10);
myList.add(new Integer(10));
myList.add("Hello, World");
Integer myInt = (Integer)myList.iterator().next();
제네릭을 사용하면 오브젝트의 타입이 정해 다른 타입의 오브젝트를 제한하거나 컴파일시에
예외를 발생시킬수 있으며 좀더 코드가 간결해진다. 사용법은 <> 안에 어떤 타입이 저장될것인지
정해주면 된다.
import java.util.*;
public class First {
public static void main(String args[]) {
List<Integer> myList = new ArrayList<Integer>(10);
myList.add(10);
myList.add("Hello, World");
}
}
다음의 에러가 발생한다.
First.java:7: cannot find symbol
symbol : method add(java.lang.String)
location: interface java.util.List<java.lang.Integer> myList.add("Hello, World");
^
1 error
보통 제네릭은 이터레이터(iterator)를 이용해 루프 강화(enhanced for loop )와 함께 사용된다.
제네릭이 없을 경우, String 오브젝트의 하나의 List를 루핑하려면 각각의 엘리먼트를 List로부터 적절한 타입으로 변환해야 한다. 그러나 제네릭과 루프 강화를 이용하면 모든 것이 간단해진다
import java.util.*;
public class Old {
public static void main(String args[]) {
List list = Arrays.asList(args);
Iterator itor = list.iterator();
while (itor.hasNext()) {
String element = (String)itor.next();
System.out.println(element + " / " + element.length());
}
}
}
루프강화와 제네릭을 결합하여 가독성과 관리용이성을 더 향상시킨 예제이다.
import java.util.*;
public class New {
public static void main(String args[]) {
List<String> list = Arrays.asList(args);
for (String element : list) {
System.out.println(element + " / " + element.length());
}
}
}
제네릭을 사용하기 위해서는 Compliance 를 5.0 으로 교체해야되는데 eclipse 에서 다음과 같이 하면된다.
window > Preference > JAVA > Compiler
원하는 컴파일 버전을 선택할수 있는데 다음과 같다.
프로젝트선택 > Properties > Java Compiler
'자바(JAVA)' 카테고리의 다른 글
| 테이블 컴퍼지트에서 체크박스넣기 (0) | 2008.08.07 |
|---|---|
| JAVA System 설정값들 모두 가져오기 (0) | 2008.08.04 |
| hibernate antlr/ANTLRException 에러 (0) | 2008.08.03 |
| JSTL cannot be resolved error (1) | 2008.08.03 |
| smtp 서버이용 메일보내기 (0) | 2008.07.29 |
| Hibernate 입력관련 에러 (0) | 2008.07.24 |
| spring 과 hibernate 연결 (0) | 2008.07.20 |
| spring 에서 MS SQL JDBC 연동하기 (0) | 2008.07.19 |

