제네릭스
- 메소드나 클래스를 컴파일 할 때 객체의 타입 체크를 해 주는 기능
- 의도치 않은 타입의 객체가 저장되는 것을 방지할 수 있음
#자주 쓰이는 타입 약자
- <T> == Type
- <E> == Element
- <K> == Key
- <V> == Value
- <N> == Number
- <R> == Result
# 제네릭스 기본 형식
public class 클래스명<T> {...}
public interface 인터페이스명<T> {...}
# 제네릭스를 사용한 인터페이스 : Collection
public interface Collection<E> extends Iterable<E> {메소드 나열}
// Collection은 <E> 타입을 사용하는 인터페이스이다.
public interface List<E> extends Collection<E> {메소드 나열}
// List 는 <E> 타입을 사용하는 인터페이스이다.
// Collection 내에 있는 메소드를 모두 상속 받으면서도 List의 고유한 메소드를 가진 인터페이스라는 의미이다.
# 인터페이스 내에서 인터페이스와 타입이 다른 메소드의 경우
<T> T[] toArray(T[] a);
// 앞에 먼저 타입 <T>를 표기한다.
boolean containsAll(Collection<?> c);
// <?>는 인터페이스에 선언한 E와 타입이 반드시 같지 않아도 된다는 의미이다.
boolean addAll(Collection<? extends E> c);
// <? extends E>는 E 타입이거나 E를 상속받은 컬렉션 클래스만 addAll 한다는 의미이다.