제네릭

|

제네릭 ; 일반적인, 포괄적인

 

제네릭(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
And