썸넬 Image ref :
https://medium.com/rico-ramos/java-generics-5da1455d5a31
제네릭은 클래스 내부에서 지정하는 것이 아닌 외부에서 사용자에 의해 지정되는 것을 의미합니다. 즉, 특정 타입을 미리 지정하는 것이 아닌 필요에 의해 지정할 수 있도록 하는 일반(Generic) 타입이라는 것입니다.
JDK 5~6에서 제네릭이 추가되면서 기존 코드를 수용하기 위해 제네릭을 지원하기 전의 코드와 지원한 후의 코드의 호환성 유지를 목적으로 개발되었습니다. 따라서, '컴파일 타임'에만 타입을 검사하고, '런타임'에는 해당 타입 정보를 소거 또는 체크하지 않는 것입니다.
<>내 글자는 통상적인 예시일 뿐, 반드시 일치할 필요는 없습니다.
ref
https://st-lab.tistory.com/153
https://st-lab.tistory.com/174#%ED%81%B4%EB%9E%98%EC%8A%A4
제네릭으로 프로그램하다 보면 많은 컴파일러 경고 메시지를 보게 됩니다.
코드의 형 안정성(타입 안정성) 보장을 위해 모든 무점검 경고는, 가능하다면 없애야 합니다. 제거할 수 없는 경고 메시지는 형 안정성이 확실할 때만 @SuppressWarnings("unchecked") 어노테이션을 사용해 억제해야 합니다.
SuppressWarnings 어노테이션은 개별 지역 변수 선언부터 클래스 전체에까지, 어떤 크기의 단위에도 적용할 수 있지만 가능한 작은 범위에 적용해야 합니다. 그 이유는 중요한 경고 메시지까지 억제하게 될 수 있기 때문입니다.
@SuppressWarnings("unchecked") 어노테이션을 사용할 때마다, 형 안정성을 위반하지 않는 이유를 반드시 주석으로 붙여줘야 합니다.
- 무점검 경고(unchecked warning)는 중요하다
- 모든 무점검 경고는 프로그램 실행 도중에 ClassCastException이 발생할 가능성을 나타낸다
- 무점검 경고 메시지는 최선을 다해 제거하라
- 경고를 제거할 수 없으나 형 안정성을 보장한다는 사실을 입증할 수 있다면, @SuppressWarnings("unchecked") 어노테이션을 사용하되, 적용 범위는 최소화해야 한다
- 경고 메시지를 억제한 경우, 그 이유를 반드시 주석에 써야 한다