제네릭의 단점
선언된 타입으로만 매개변수입력해야함
상속받은 클래스, 부모클래스를 매개변수로 사용하고 싶어도 불가능함
어떤 타입이 오더라도 상관이 없는 경우에는 대응하기 불편
이러한 제네릭의 단점을 해결할 수 있는 와일드 카드를 사용!
타입 파라미터가 유의미하게 사용되지 않는다면 와일드카드를 사용한다.
데이터 타입보다 인자로 넘어오는 타입 메소드를 중심에 둔다.
List<?> list = new ArrayList<>() //제한없음, Object로 정의되어서 사용된다.
List<? extends A> list = new ArrayList<>(); //상위 클래스 제한
//?파라미터가 Object의 자식
//특정 클래스의 자식 클래스만을 인자로 받겠다는 선언
List<? super A> list = new ArrayList<>(); //하위 클래스 제한
//?파라미터가 A 클래스의 부모
//A클래스의 부모인 어떤 객체도 인자로 올 수 있지만, 사용할 때 Object로 취급