2017. 2. 14. 22:20ㆍWork/Java
제네릭(Generic)
ex) ArrayList<String> strList = new ArrayList<String>(); 처럼 <>은 다이아몬드 지시자 라고 하며 지시자 안에 클래스를 선언해서 사용, <String>, <Integer>, <Double> 사용 가능
public class ValueMapper<T>{ <- 와일드 카드로 제네릭 기법을 사용하겠다고 먼저 선언
private T t; <- 클래스 변수의 데이터형으로 와일드 카드를 사용할 수 있습니다.
public ValueMapper(T t){ <- 이처럼 매개 변수의 데이터형으로도 사용 가능
this.t = t;
}
public T getValue(){ <- 메소드의 반환 데이터형으로도 사용 가능
return this.t;
}
}
- 클래스 내부에서 사용하는 형(Type)을 다이아몬드 지시자로 받을 수 있다.
지시자를 사용해서 데이터형을 명시하지 않으면 제네릭 특징을 사용할 수 없다.
- 명확하지 않은 형 변환 과정을 생략할 수 있다.
제네릭 클래스를 인스턴스하는 과정에서 사용된 클래스는 형 변환을 생략할 수 있다.
- 하나의 클래스로 다양하게 처리할 수 있다.
하나의 클래스를 개발해서 여러 방면으로 재사용 가능
와일드 카드
다이아몬드 지시자 안에 선언된 문자, 클래스가 아닌 기호
- E(Element) : 외부에서 입력하는 클래스가 제네릭 클래스 내부에서 요소로 사용될 때 사용
- K(Key) : 외부에서 입력하는 클래스가 제네릭 클래스 내부에서 키로 사용, 보통 V 키워드와 같이 사용, Hashtable이나 Hashmap과 같이 Key/Value 데이터 저장시 Key의 클래스형 결정
- V(Value) : 외부에서 입력하는 클래스가 제네릭 내부에서 값으로 사용될 때 사용
- T(Type) : 외부에서 입력하는 클래스가 제네릭 클래스 내부에서 타입으로 사용될 때 사용
- N(Number) : 외부에서 입력하는 클래스가 숫자 형태로 사용될 때 사용, Integer나 Double등
- ? : 모든 클래스를 의미, Object 클래스로 인식, 클래스 선언부에 다이아몬드 지시자로 사용 불가, 확장 문법에서 사용
- S, U : 중복된 와일드 카드 문자 선언을 피하기 위해서 추가적으로 사용
주의 사항
- 클래스 선언부에 같은 와일드 카드 문자는 중복해서 사용 불가
- 클래스 선언부에 사용한 와일드 문자만 클래스 내부에서 사용 가능
-> 포괄적인, 통칭의라는 의미를 가지고 있으며 클래스 내부에서 사용할 타입을 외부에서 지정하는 기법을 의미한다.