제네릭 ; 일반적인, 포괄적인
제네릭(Generic)은 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법
클래스를 정의 할 때는 info의 데이터 타입을 확정하지 않고 인스턴스를 생성할 때 데이터 타입을 지정하는 기능이 제네릭이다.
############### 제네릭을 사용하는 이유 ##################
타입안전성 : 컴파일단계에서 오류가 검출되어야 함.
컴파일 언어의 기본은 모든 에러는 컴파일이 발생할 수 있도록 유도해야 한다는 것이다. 런타임은 실제로 애플리케이션이 동작하고 있는 상황이기 때문에 런타임에 발생하는 에러는 항상 심각한 문제를 초래할 수 있기 때문이다.
즉 모든 타입이 올 수 있기 때문에 타입을 엄격하게 제한 할 수 없게 되는 것이다.(타입에 대해서 안전하지 않는 에러)
- 컴파일 단계에서 오류가 검출된다.
- 중복의 제거와 타입 안전성을 동시에 추구할 수 있게 되었다.
############### 제네릭의 특성 ##################
1. 복수의 제네릭을 사용 : <T, S>와 같은 형식을 사용한다.
2. 기본 데이터 타입과 제네릭 : 제네릭은 참조 데이터 타입에 대해서만 사용할 수 있다. 기본 데이터 타입에서는 사용할 수 없다. new Integer는 기본 데이터 타입인 int를 참조 데이터 타입으로 변환해주는 역할을 한다. 이러한 클래스를 래퍼(wrapper) 클래스라고 한다.
3. 제네릭은 생략가능하다.
4. 제네릭은 메소드에 적용할 수도 있다.
############### 제네릭의 제한 ##################
extends : 제네릭으로 올 수 있는 데이터 타입을 특정 클래스의 자식으로 제한할 수 있다
extends는 상속(extends)뿐 아니라 구현(implements)의 관계에서도 사용할 수 있다.
############## 제네릭의 용법 ##################
<T {extends or super} {클래스 or 인터페이스}> 의 형태로 쓰인다.
<T extends String> - 클래스 String자신 또는 String을 상속하는 아무 타입
<T extends List> - 인터페이스 List자신 또는 List를 상속하는 아무 타입
<T super HashMap> - 클래스 HashMap자신 또는 HashMap이 상속하는 아무 타입
E - Element
K - Key
N - Number
T - Type
V - Value
'Java' 카테고리의 다른 글
문자열 (0) | 2019.06.27 |
---|---|
Collections Framework (0) | 2019.06.15 |
참조 (0) | 2019.06.14 |
상수와 enum (0) | 2019.06.12 |
Object 클래스 (0) | 2019.06.12 |