컴파일 시간에 더 많은 버그를 감지할 수 있도록 하여 코드에 안정성을 추가한다.
다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입체크(compile-time type check)를 해주는 기능이다. 객체의 타입을 컴파일 시에 체크하기 때문에 객체의 타입 안정성을 높이고 형변환의 번거로움이 줄어든다.
- 장점
- 컴파일에서 더 강력한 유형 검사
- 케스트 제거
- 프로그래머가 일반 알고리즘을 구현할 수 있도록 지원
- 제한
- 제네릭 형식의 변수는 참조 타입(Reference Types)만 인스턴스를 생성할 수 있다.
- 기본 타입(Primitive Types) 생성 불가
- 참조 : Object는 사용 가능한 가장 일반적인 유형이고 기본 유형으로 확장되지 않기 때문에 제네릭이 참조 유형에 대해서만 작동할 수 있다는 제한이 부과되었습니다.
- static멤버에 타입변수 T를 사용할 수 없다.
https://itmining.tistory.com/20
- 지네릭 타입의 배열을 생성할 수 없다.
- 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
Lesson: Generics (Updated) (The Java™ Tutorials > Learning the Java Language)
The Java Tutorials have been written for JDK 8. Examples and practices described in this page don't take advantage of improvements introduced in later releases and might use technology no longer available. See Java Language Changes for a summary of updated
docs.oracle.com
'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 |