객체 생성시 파라미터의 타입을 지정한다.
잘못된 타입이 들어갈 수 있는것을 컴파일 단계에서 방지할 수 있다.
코드의 재사용성이 높아진다.(타입별로 코드를 재작성 하지 않아도 됨)
와일드 카드 - 어떤 타입을 받아도 상관없다.
<K extends T> // T와 T의 자손 타입만 가능 (K는 들어오는 타입으로 지정 됨)
<K super T> // T와 T의 부모(조상) 타입만 가능 (K는 들어오는 타입으로 지정 됨)
<? extends T> // T와 T의 자손 타입만 가능
<? super T> // T와 T의 부모(조상) 타입만 가능
<?> // 모든 타입 가능. <? extends Object>랑 같은 의미
업캐스팅에서의 안정성