자바에서 정의한 제네릭 기본이 있다.

꼭 이 규칙을 지켜야 컴파일 되는 것은 아니다. 다른 사람이 보더라도 쉽게 이해할 수 있도록 하려면 이 규칙을 따르는게 좋다.

제네릭에 ?

?는 영어로 wildcard라 한다. 제네릭을 사용할 때 <> 안에 들어가는 타입은 기본적으로 어떤 타입이라도 상관 없다. super와 extends를 통해 제한된 클래스만 받도록 할 수 있으며, wildcard만 선언하게 되면 어떤 타입도 상관 없다.

제네릭 선언에 사용하는 타입의 범위 지정

위에 <>안에 들어가는 타입이라도 상관 없지만 wildcard에 extends와 super를 붙여 범위를 제한 할 수 있다. extends는 인자로 준 객체 또는 인자로 준 객체의 자식 객체로만 제한 할 수있다. super의 경우 인자로 준 객체와 그 객체의 부모 클래스로 제한 할 수 있다.