Generic[Java]

SnowCat·2023년 6월 7일
0

Java - Language

목록 보기
11/17
post-thumbnail

제네릭이란?

  • 자바에서 제네릭이란 데이터의 타입을 일반화 하는 것을 의미함
  • 클래스나 메서드에서 사용할 내부 데이터 타입을 컴파일시에 미리 지정해, 객체의 타입 안정성을 높이며, 타입 검사에 필요한 노력을 줄일 수 있음
//선언
class MyArray<T> {
    T element;
    void setElement(T element) { this.element = element; }
    T getElement() { return element; }
}

// 사용
MyArray<Integer> myArr = new MyArray<Integer>();
MyArray<Integer> myArr = new MyArray<>() //타입추론이 가능하면 생략가능
  • 제네릭은 컴파일시 컴파일러에 의해 자동으로 타입이 변환되어 제거됨
  • 만약 제네릭에 타입 제한을 걸 경우 extends 키워드를 사용
class LandAnimal { ... }
class AnimalList<T extends LandAnimal> { ... }

// 인터페이스 사용시에도 extends 키워드를 사용해야함에 유의
interface WarmBlood { ... }
class AnimalList<T extends WarmBlood> { ... } // implements 키워드를 사용해서는 안됨.

// 클래스, 인터페이스를 동시에 상속시에는 &기호를 사용
class AnimalList<T extends LandAnimal & WarmBlood> { ... }

제네릭 메서드

  • 메서드에서도 제네릭 타입을 사용할 수 있음
/*
 * ? -> 와일드 카드로 아무 타입이나 들어갈 수 있음
 * ? extends T -> T또는 T를 상속받는 타입
 * ? super T -> T또는 T가 상속받은 타입
 */
class AnimalList<T> {
    ...
    public static <V> void sort(List<V> list, Comparator<? super T> comp) {
        ...
    }
    ...
}
profile
냐아아아아아아아아앙

0개의 댓글