데이터 형식에 의존하지 않고, 하나의 값이 여러 다른 데이터 타입들을 가질 수 있도록 하는 방법
public class className<타입 매개변수>{ ... }
public interface interfaceName<타입 매개변수>{ ... }
클래스 외부에서 사용자에 의해 지정
잘못된 타입이 들어오는 것을 방지
타입 변환을 해줄 필요가 없어 관리 용이 (타입 체크, 형변환 생략)
다른 타입에 유사한 기능을 지원하고자 하는 경우 코드의 재사용성을 높일 수 있음
객체 타입의 안정성
타입 | 설명 |
---|---|
<T> | Type |
<E> | Element |
<K> | Key |
<N> | Number |
<V> | Value |
<R> | Result |
다이아몬드 연산자
자바 7버전 부터 생성자에 자료형 명시 선택적
ArrayList<String> test = new ArrayList<>();
?
기호 사용
<?>
(제한 없음, Unbounded Wildcards)
<? extends T>
(상위 클래스 제한, Upper Bounded Wildcards)
<? super T>
(하위 클래스 제한, Lower Bounded Wildcards)
public class ClassName <T> { ... }
public class SubClassName { ... }
public class Main {
public static void main(String[] args) {
ClassName<SubClassName> a = new ClassName<SubClassName>();
ClassName<String> b = new ClassName<String>();
ClassName<Integer> c = new ClassName<Integer>();
}
}
호출되는 시점에서 제네릭 타입 지정
특정 자료형에 사용하는 메서드 사용 불가 (예: String
의 length()
)
Object 클래스 메서드 사용 가능
[Java/자바] - 제네릭(Generic) - 와일드카드(Wildcard) 타입