자바 언어에 타입 파라미터라는 개념을 도입한 것이 제네릭스(Generics)이다.
인터페이스나 메서드에서 처리할 타입을 사용하는 쪽에서 지정할 수 있다.

가장 쉬운 예로 List 인터페이스는 제네릭스 기반으로 작성되었다.

List  
booelan add(E e);  
E get(int index);

List<Integer> list; 혹은 List<String> list; 등 사용하는 쪽에서 지정하는 것이다.

제네릭스가 없다면 여러 타입을 담으려면 결국 모든 클래스의 조상인 Object로 지정해야 했을 것이다.

List  
boolean add(Object object);  
Object get(int index);

이렇게 하면 발생하는 문제는 다음과 같다.

  1. 형변환
    매번 사용할 때마다 형변환을 해줘야 한다.

    Integer 타입을 예로 들면,

    Integer value = 4;
    add((Object) value);
    (Integer) ret = get(1);
  2. 타입 체크가 안됨
    Integer 리스트를 만들었는데 모르고 Long을 넣어도 알 수가 없다.

    Long value = 4L;
    add((Object) value);

이러한 이유로 제네릭스를 이용하는 것이 좋다.

참고자료

토비의 스프링 3.1, 이일민

+ Recent posts