아이템 26. 로 타입은 사용하지 말라 - KwangtaekJung/book-effective-java GitHub Wiki

  • 클래스와 인터페이스에 타입 매개변수(type parameter)가 쓰이면, 이를 제네릭 클래스, 제네릭 인터페이스라고 한다.

  • 통틀어 제네릭 타입(generic type)이라 한다.

  • 제네릭 타입은 일련의 매개변수화 타입(parameterized type)을 정의한다.

  • 제네릭 타입에서 타입 매개변수를 전혀 사용하지 않는 경우를 로 타입(raw type)이라 한다.

    • raw 타입을 쓰면 제네릭이 안겨주는 안정성과 표현력을 모두 잃게 된다.
      • 예외 1) class 리터럴
      • 예외 2: instanceof 연산자
  • 핵심정리

    • 로 타입을 사용하면 런타임에 예외가 일어날 수 있으니 사용하면 안된다.
    • 로 타입은 제네릭 도입 이전의 코드와의 호환성을 위해 제공될 뿐이다.

  • List<Object>List<?>의 차이점
    • Object[] arr = new String[10]; =>배열은 공변타입이라 Object로 이렇게 가능함. 단, 다른 타입을 add 하려고 하면 런타임에 에러남.

    • 하지만 제네릭을 Object로 걸어 놓는다고 해서 제네릭 타입이 어떤 타입이든 다 받아주겠다 이런 게 안됩니다

      void method01(List<Object> list){
      
      }
      
      method01(new ArrayList<String>());
    • <?>는 와일드카드라는 명칭으로 어떤 제네릭타입이든 다 받아주겠다는겁니다.

      void method02(List<?> list){
      
      }
      
      method02(new ArrayList<String>());

한글 용어 영문 용어 아이템
매개 변수화 타입 Parameterized type List Item 26
실제 타입 매개 변수 actual type parameter String Item 26
제네릭 타입 generic type List Item 26, 29
정규 타입 매개 변수 formal type parameter E Item 26
비한정적 와일드 카드 타입 unbounded wildcard type List<?> Item 26
로 타입 raw type List Item 26
한정적 타입 매개변수 bounded type parameter Item 29
재귀적 타입 한정 recursive type bound <T extends Comparable> Item 30
한정적 와일드 카드 타입 bounded wildcard type List<? extends Number> Item 31
제네릭 메서드 generic method static <E> List<E> asList(E[] a) Item 30
타입 토큰 type token String.class Item 33
⚠️ **GitHub.com Fallback** ⚠️