용어 정리 : 제네릭클래스, 제네릭 인터페이스 

=> 클래스와 인터페이스 선언에 타입 매개변수가 쓰이는 클래스나 인터페이스

 

제네릭 클래스나 제네릭 인터페이스를 제네릭 타입이라 한다.

 

제네릭 타입을 하나 정의하면 그에 딸린 로 타입도 함께 정의된다.

 

로 타입이란 제네릭 타입에서 타입 매개변수를 전혀 사용하지 않을때를 말한다.(ex, List 처럼 쓰는것이 아닌 List만 쓰는것)

 

이 챕터의 핵심은 raw type을 쓰지 말자는 것이고

쉽게 이해하면 매개변수 삽입에 오류가 발생할 수 있기 때문에 안정성을 위해

타입 매개변수를 명시해주는 것이 중요하다.

 

정 raw type처럼 사용하고 싶다면 List<Object>

나 LIst<?> 처럼 임의 객체를 허용하게라도 넣어주어야 하는 것이 좋다.

 

Object를 사용하면 모든 타입을 허용한다는 의사를 컴파일러에 명확히 전달하는 것이고

?(와일드카드)를 사용 하는 것은 실제 타입 매개변수가 무엇인지 신경 쓰고싶지 않을 때 사용하는 것이다.

raw type을 사용해도 되는경우는

  • class 리터럴을 사용하는 경우
  • instanceof 연산자를 사용하는 경우 정도이다.
if (o instanceof Set){ // 로타입
    Set<?> s = (Set<?>)o //와일드카드 타입
        ....
}

+ Recent posts