객체 생성시 파라미터의 타입을 지정한다.

잘못된 타입이 들어갈 수 있는것을 컴파일 단계에서 방지할 수 있다.

코드의 재사용성이 높아진다.(타입별로 코드를 재작성 하지 않아도 됨)

와일드 카드 - 어떤 타입을 받아도 상관없다.

<K extends T>	// T와 T의 자손 타입만 가능 (K는 들어오는 타입으로 지정 됨)
<K super T>	// T와 T의 부모(조상) 타입만 가능 (K는 들어오는 타입으로 지정 됨)
 
<? extends T>	// T와 T의 자손 타입만 가능
<? super T>	// T와 T의 부모(조상) 타입만 가능
<?>		// 모든 타입 가능. <? extends Object>랑 같은 의미

업캐스팅에서의 안정성