✔제너릭
- 제너릭(Generics) : 다양한 타입의 객체를 다루는 메서드, 컬렉션 클래스에서 컴파일 시에 타입 체크
- 미리 사용할 타입을 명시해서 형 변환을 하지 않아도 되게한다.
- 객체의 타입에 대한 안전성 향상 및 형 변환의 번거로움 감소.
- 표현
- 클래스 또는 인터페이스 선언 시 <>에 타입 파라미터 표시
- Class_Name : Raw Type
- Class_Name : Generic Type
- 타입 파라미터 : 특별한 의미의 알파벳 보다는 단순히 임의의 참조형 타입을 말함.
- T : reference Type, E : Element, K : Key, V : Value
- 객체 생성 : 변수 쪽과 생성 쪽의 타입은 반드시 같아야 한다.
- ClassName generic = new ClassName();
- 생성은 생략하여도 변수 쪽과 묵시적으로 맞추어 준다.
public class NormalBox{
private Object some;
public Object getSome(){
return some;
}
public void setSome(Object some){
this.some = some;
}
}
public class GenericBox<T> {
private T some;
public GenericBox() {}
public GenericBox(T some) {
this.some = some;
}
public T getSome() {
return some;
}
public void setSome(T some) {
this.some = some;
}
}
- type parameter의 제한 : 필요에 따라 구체적인 타입 제한 필요
- (ex) 계산기 프로그램 : Number 이하의 타입 (Byte, Short, Integer, ...)로만 제한
- type parameter 선언 뒤
extends
와 함께 상위 타입 명시
- 인터페이스로 제한할 경우도 extends 사용.
- 클래스와 함께 인터페이스 제약 조건을 이용할 경우 &로 연결.
- 와일드 카드(?) : Generic Type에서 구체적인 타입 대신 사용
- Generic type<?> : 타입에 제한이 없음(Object).
- Generic type<? extends T> : T 또는 T를 상속받은 타입들만 사용 가능.
- Generic type<? super T> : T 또는 T의 조상 타입만 사용 가능.
- Generic Method : 파라미터와 리턴 타입으로 type parameter를 갖는 메서드
- 메서드 리턴 타입 앞에 타입 파라미터 변수 선언.
- 제한자 <타입 파라미터> 리턴_타입 메서드명(파라미터).
- 메서드 호출 시점에 타입 파라미터의 타입 결정.