JAVA Programming

Growing_HJ·2024년 6월 6일

일기장

목록 보기
21/51

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. 제네릭 메소드

  • 메소드의 선언부에 제네릭스 타입이 선언된 메소드
  • static 멤버에서는 제네릭스를 사용할 수 없다.
  • 제네릭 메소드에는 제네릭 타입이 지역 변수처럼 메소드 내에서 지역적으로만 사용되므로, 사용이 간으하다.

B-1. 제네릭 메소드의 형태

public static <T> void sort(List<T> list) { => 지네릭 메소드의 형태. 
        list.sort(null);
    } // = Collections.sort()와 동일. 

0개의 댓글