2024.06.03. MON <D + 11>, Generics (제네릭스)
A. 제한된 제네릭스 클래스 => 제네릭스에 다형성을 적용하기
case 1. 클래스 관계에 대한 제한
Box<T> b = new Box<T> ();
위에 타입변수 T대신에 어떠한 것이라도 올 수 있음. (Apple, Grape, Toy 등등)
! 제한을 두고싶은 경우, (자바의 4대 특성을 고려한 제한두기는 즉, 클래스 간의 관계를 통해서 제한을줄 수 있음)
class FruitBox<T> {
ArrayList<T> list = new ArrayList<T>();
}
위의 코드를 토대로 Fruit를 상속받는 것들만 T에 올 수 있도록 하고 싶은 경우.
-> 여기서 제한하다의 제한의 의미는 관계의 제한을 의미한다.
// 제네릭스를 사용한 다형성
class FruitBox <T extends Fruit> {
//1. 컴파일 전
ArrayList<T> list = new ArrayList<T>();
//2. 컴파일 후
ArrayList<Fruit> list = new ArrayList<Fruit>();
}
case2. 인터페이스 구현에 대한 제한.
T extends Fruit <= Fruit를 포함한 Fruit의 자손만 가능하다.
T에 오는 실제 타입 클래스에 인터페이스 구현을 강제시키는 경우
==> 추상메소드로 강제시킨다는 의미
B. 제네릭 메소드
B-1. 제네릭 메소드의 형태
public static <T> void sort(List<T> list) { => 지네릭 메소드의 형태.
list.sort(null);
} // = Collections.sort()와 동일.