[Java] 12장 - 지네릭스

N’oublie pas de t’aimer·2025년 1월 4일

Java

목록 보기
3/18

1. 지네릭스란?

실행 시 발생하는 에러를 컴파일 에러로 바꾸기 위해 만들어진 것이다. (JDK 1.5에서 도입)

지네릭스를 도입한 클래스는 일반 클래스에서 지네릭 클래스가 된다.

런타임 에러보다 컴파일 에러가 낫기 때문에 컴파일 단계에서 타입 체크를 하는 것이 필요하다.

예를 들어

ArrayList list = new ArrayList(); // Object 객체 추가 가능. JDK 1.5 이전에는 이렇게 사용했음. JDK 1.5 이후에는 ArrayList<Object> list = new ArrayList<Object>(); 로 사용하는 것이 좋다.
list.add(10);
list.add(20);
list.add("30");

Integer i = (Integer) list.get(2); // 컴파일 시에는 타입이 Object이므로 컴파일 에러가 나지 않는다.

위 코드를 실행하게 되면 런타임 시에 list.get(2)의 타입은 String이므로
String을 Integer로 cast할 수 없다는 런타임 에러가 발생한다.

이러한 런타임 에러를 컴파일 에러로 바꾸기 위해 지네릭스를 사용할 수 있다.

ArrayList<Integer> list = new ArrayList<Integer>(); // 컴파일러에게 Integer만 넣을 수 있다는 정보를 제공
list.add(10);
list.add(20);
list.add("30"); // 컴파일 에러

Integer i = list.get(2) // list.get(2)가 Integer인 것을 알기 때문에 형변환을 생략할 수 있음. (참고: upcasting은 형변환 생략 가능, downcasting은 불가) ArrayList<T> 의 get은 T 데이터형을 리턴

지네릭스의 도입으로 인해 tvList에 모든 객체가 아닌 Tv 객체만 넣을 수 있게 된다.

ArrayList<Tv> tvList = new ArrayList<Tv>(); // Tv 객체만 저장할 수 있는 ArrayList를 생성

tvList.add(new Tv()); // Ok
tvList.add(new Audio()); // 컴파일 에러.

결론적으로 지네릭스는

  • 컴파일 시 타입을 체크해준다.
  • 객체의 타입 안정성을 높인다(런타임에 타입 관련 오류가 발생할 확률을 컴파일 시에 줄여줌).
  • 형변환의 번거로움을 줄여준다.

위의 코드에서 Tv와 같은 변수를 타입 변수라고 한다.

profile
매일 1퍼센트씩 나아지기 ୧(﹒︠ ̫ ̫̊ ̫﹒︡)୨

0개의 댓글