컴파일 타임 타입 안정성을 제공해준다.
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 |