- 컴파일시 타입을 체크해주는 기능(compile-time-type-check) - JDK1.5
- 객체의 타입 안정성을 높이고, 형변환의 번거로움을 줄여줌
// Tv객체만 저장할 수 있는 ArrayList를 생성 ArrayList<Tv> tvList = new ArrayList<Tv>(); // ArrayList는 Object배열을 가지므로 모든 종류의 객체가 저장가능하다. tvList.add(new Tv()); // OK. tvList.add(new Audio)); // 컴파일 에러. Tv 외에 다른 타입은 저장 불가
- 지네릭스의 장점
- 1.타입 안정성을 제공한다.
- 2.타입체크와 형변환을 생략할 수 있으므로 코드가 간결해 진다.
- Exception = Runtime error(실행 중 발생하는 에러)
- RuntimeException = 프로그래머 실수로 발생에러
- ClassCastException = 형변환에러
- NullPointerException = 참조변수가 null일 때 메서드 호출시 에러
- IndexOutOfBoundException = 배열 범위 벗어나는 것
- 지네릭스란, RuntimeException을 Compiletime에러로 수정하는 것이다. (프로그램 실행 중 예외가 발생해 종료되지 않도록 사전에 방지)
< Ex >String str = null // 이렇게 하지 않고, String str = "" ; // 빈문자열로 표시한다. (NullPointerException) str.length()를 실행 시 str은 null .length()는 메서드호출이므로 NullPointerException 발생 그러나, 빈문자열일 경우, 결과값이 0이므로 NullPointerException이 발생하지 않는다.
Object[] objArr = null // 이렇게 하지 않고, Object[] objArr = new Object // 길이가 0인 배열 (= Object[] objArr={};)
- 클래스를 작성할 때, Object타입 대신 타입 변수(E)를 선언해서 사용.
- ArrayList< 변수이름 > : 타입변수
- 변수이름은 E 이외에도 사용 가능하다.
- 객체를 생성시, 타입 변수(E) 대신 실제 타입(Tv)을 지정(대입)
// 타입 변수 E 대신에 실제 타입 Tv를 대입 ArrayList<Tv> tvList = new ArrayList<Tv>();
- Tv가 E에 대입된다.
- 타입 변수 대신 실제 타입이 지정되면, 형변환 생략가능
- 예전에는 타입이 Object라서 형변환이 필요했지만, 현재는 바꼈으므로 형변환 생략가능(Tv로 타입이 일치하므로)