-------------------------------------------------------
🔻 제네릭 문법 살펴보기
- 클래스 이름 뒤에 <> 문법 안에 들어가야 할 타입 변수를 지정
- 타입 변수의 이름을 T로 사용하는 이유는 일종의 컨벤션
-------------------------------------------------------
🔻 제네릭 용어 정리하기
---------------------------------
public class Generic<T> { ... }
Generic<String> stringGeneric = new Generic<>();
---------------------------------
- Generic<T>의 클래스처럼, 제네릭을 사용한 클래스를 제네릭 클래스라고 합니다.
- 제네릭에서 <>사이에 들어가는 변수명 T는 타입 변수라고 합니다.
- Generic 클래스를 원시 타입이라고 합니다.
-------------------------------------------------------
🔻 제네릭의 제한
- 객체의 static 멤버에 사용할 수 없습니다.
- 제네릭 배열을 생성할 수 없습니다.
-------------------------------------------------------
🔻 제네릭의 문법
- 다수의 타입 변수를 사용
- 제네릭 배열을 생성할 수 없습니다.
---------------------------------
public class Generic<T, U, E> {
public E multiTypeMethod(T t, U u) { ... }
Generic<Long, Integer, String> instance = new Generic();
instance.multiTypeMethod(longVal, intVal);
---------------------------------
- 다형성 즉 상속과 타입의 관계는 그대로 적용됩니다.
- 와일드카드를 통해 제네릭의 제한을 구체적으로 정할 수 있습니다.
1. <? extends T> : T와 그 자손들만 사용 가능
2. <? super T> : T와 그 조상들만 가능
3. <?> : 제한 없음
- 메서드를 스코프로 제네릭을 별도로 선언할 수 있습니다.
-------------------------------------------------------
-------------------------------------------------------
🔻 오류?
---------------------------------
-
public interface List<E> extends Collection<E> {
int size();
boolean isEmpty();
...
boolean addAll(Collection<? extends E> c);
boolean add(E e);
...
}
---------------------------------
- List 인터페이스는 제네릭 인터페이스입니다.
- 타입 변수 E는 리스트에 저장되는 데이터의 타입을 타입 변수로 선언했습니다.
- 실제로 List 속성을 가지는 구현체들에 있는 add() 메소드 같은 경우, 리스트 인터페이스에 지정한 E라는 타입을 추가하는 데 사용됩니다.
-------------------------------------------------------
🔻 예외?
- 일반적으로 회복이 가능한 문제
- 현실적으로 코드 레벨에서 할 수 있는 문제 상황에 대한 대응은 “예외 처리”
-------------------------------------------------------
🔻 Collection 다시 보기

-------------------------------------------------------
🔻 오토 박싱, 오토 언박싱
---------------------------------
Integer num = new Integer(17);
int n = num.intValue();
Character ch = 'X';
char c = ch;
---------------------------------
-------------------------------------------------------
