Please Enable JavaScript!
Gon[ Enable JavaScript ]

제네릭(generic)을 통해 Java Collections 구현

자바(JAVA)
반응형
JDK5.0 버전부터 Collecton 생성시 제네릭(generic) 을 통해서 java Collections 프레임워크와의
컴파일 타임 타입 안정성을 제공해준다.

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에 들어가서
원하는 컴파일 버전을 선택할수 있는데 다음과 같다.
프로젝트선택 > Properties > Java Compiler
사용자 삽입 이미지
반응형
Posted by 녹두장군1
,