제네릭

이규은·2021년 10월 27일
0

제네릭

목록 보기
1/1

자바에서 제네릭이란 데이터의 타입을 일반화하는 것을 의미한다.
제네릭은 클래스나 메소드에서 사용할 내부 데이터 타입을 컴파일 시에 미리 지정하는 방법이다.

컴파일시에 미리 타입검사를 수행하면 다음과 같은 장점을 가진다.

  1. 클래스나 메소드 내부에서 사용되는 객체의 타입 안정성을 높일 수 있다.
  2. 반환값에 대한 타입 변환 및 타입 검사에 들어가는 노력을 줄일 수 있다.

제네릭 선언

class MyArray<T> {
    T element;

    void setElement(T element) {
        this.element = element;
    }

    T getElement() {
        return element;
    }
}

'T'를 타입 변수 라고 하며, 임의의 참조형 타입을 의미한다.
어떤 문자를 사용해도 상관없으며 여러개의 타입 변수는 쉼표로 구분한다.
타입 변수는 클래스에서뿐만 아니라 메소드의 매개변수나 반환값으로도 사용할 수 있다.

T : Type
E : Element
K : Key
N : Number
V : Value
R : Result

MyArray<Integer> myArray = new MyArray<>();

제네릭 클래스를 생성할 때는 타입 변수 자리에 사용할 실제 타입을 명시해야 한다.

제네릭 바운디드 타입

제네릭 바운디드 타입은 제네릭으로 사용되는 파라미터 타입을 제한할 수 있는 것을 말한다.

public class GenericArrayList<T super Number>

T extends Comparable<T> 와 같이 정의하면 Comparable의 서브클래스들만 타입으로 사용하겠다는 것이다. Comparable을 구현하기 위해서는 compareTo() 메소드를 반드시 정의해야하기 때문에 Comparable을 구현한 클래스들은 비교가 가능한 타입이 된다.

제네릭 와일드 카드

제네릭 와일드 카드는 제네릭의 타입 파라미터를 제한하는 기능을 갖는다.
제네릭 와일드 카드는 ?를 이용해 표현한다.

<? extends T> : 와일드카드의 상위타입을 제한하는 것으로 T의 하위 타입 클래스만 사용 가능
<? suepr T> : 와일드카드의 하위타입을 제한하는 것으로 T의 상위 타입 클래스만 사용 가능
<?> : 제한 없음

제네릭 메소드

제네릭 메소드는 파라미터 타입과 리턴타입으로 타입 파라미터를 갖는 메소드 이다.
리턴 타입 앞에 <>를 추가하고 타입 파라미터를 기술하여 사용한다.

타입 파라미터를 컴파일 시에 추론이 가능하기 때문에 <> 부분을 생략할 수 있다.

public T getName() {
    return name;
}
public T getGender() {
    return gender;
}

Erasure

Erasure는 타입 파라미터를 컴파일 타임에만 검사하고 런타임시에 해당 타입 정보를 알 수 없게 하는 것을 말한다.

제네릭 타입을 사용할 수 있는 일반 클래스, 인터페이스, 메소드에만 Erasure를 적용한다.

profile
안녕하세요

0개의 댓글