컴파일 시간에 더 많은 버그를 감지할 수 있도록 하여 코드에 안정성을 추가한다.
다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입체크(compile-time type check)를 해주는 기능이다. 객체의 타입을 컴파일 시에 체크하기 때문에 객체의 타입 안정성을 높이고 형변환의 번거로움이 줄어든다.
- 장점
- 컴파일에서 더 강력한 유형 검사
- 케스트 제거
- 프로그래머가 일반 알고리즘을 구현할 수 있도록 지원
- 제한
- 제네릭 형식의 변수는 참조 타입(Reference Types)만 인스턴스를 생성할 수 있다.
- 기본 타입(Primitive Types) 생성 불가
- 참조 : Object는 사용 가능한 가장 일반적인 유형이고 기본 유형으로 확장되지 않기 때문에 제네릭이 참조 유형에 대해서만 작동할 수 있다는 제한이 부과되었습니다.
- static멤버에 타입변수 T를 사용할 수 없다.
- 지네릭 타입의 배열을 생성할 수 없다.
- new 연산자를 사용하기 때문에, 컴파일 시점에 타입 T가 뭔지 정확히 알아야 한다.
- 꼭 지네릭 배열을 생성해야할 때에는 new연산자 대신 'Reflection API'의 newInstance()와 같이 동적으로 객체를 생성하는 메서드를 사용해야한다.
- Reflection
- 구체적인 클래스 타입을 알지 못해도, 그 클래스의 메소드, 타입, 변수들을 접근할 수 있도록 해주는 자바 API
- ex. JDBC : 런타입 시에 접근하려는 DB에 맞는 JDBC드라이버 클래스를 로딩
- Reflection
- 제네릭 형식의 변수는 참조 타입(Reference Types)만 인스턴스를 생성할 수 있다.
출처 :
https://docs.oracle.com/javase/tutorial/java/generics/index.html
'Java > 기초' 카테고리의 다른 글
[Java] 쓰레드(Thread) - 1/2 (프로세스, 쓰레드, 데몬쓰레드) (0) | 2021.08.08 |
---|---|
[Java] 애너테이션(Annotation) (0) | 2021.08.08 |
[Java] 인터페이스 vs 추상클래스 (0) | 2021.02.07 |
[Java] BigInteger, BigDecimal 클래스 (0) | 2020.11.15 |
[Java] StringTokenizer 클래스 (0) | 2020.11.15 |