Java

[Java] Generics란? 지네릭 프로그래밍(지네릭스)

15호의 개발자 2021. 8. 18. 19:48
반응형

[Java] Generics란? (지네릭스, 제네릭스)

 

지네릭스(Generics)란 컴파일시 타입을 체크해 주는 기능이다. (JDK 1.5 이상부터 지원된다.)

 

지네릭스 도입 전에는 형변환 에러(ClassCastException)가 일어날 때, 컴파일 에러는 나지 않았도 실행시 에러(Runtime Error)가 발생하는 경우가 있었다.

지네릭스 도입 후에는 컴파일 에러로 바로 알려준다.

지네릭스는 객체의 타입 안정성을 높이고, 타입체크와 형변환을 생략할 수 있으므로 코드가 간결해진다.

 

 

  • 지네릭 도입 전
ArrayList list = new ArrayList();
list.add(1);
list.add("2");    // String을 추가했지만 컴파일 에러는 나지 않고, 실행시 에러가 난다.

 

  • 지네릭 도입 후
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add("2");    // String을 추가했으므로 컴파일 에러가 난다.

 

여러 타입을 저장하려면 Object 타입을 입력하면 된다.

ArrayList<Object> list = new ArrayList<Object>();
list.add(1);
list.add("2"); 

 

 

 

 

즉, 지네릭 프로그래밍이란

변수의 선언이나 메서드의 매개변수를 하나의 참조 자료형이 아닌 여러 자료형이 변환될 수 있도록 프로그래밍하는 방식이다.

실제 사용되는 참조 자료형으로의 변환은 컴파일러가 검증하므로 안정적인 프로그래밍 방식이다.

 

 

 

자료형 매개 변수 (타입 변수)

자료형 매개 변수 또는 타입 변수란,

여러 참조 자료형으로 대체될 수 있는 부분을 하나의 문자로 표현하는 것이다.

Object 타입 대신 타입 변수(T (Type), E (Element), V (Value) 등)를 선언해서 사용한다.

 

아래의 GenericPrinter 클래스가 제네릭 클래스이다.

클래스명 뒤에 <타입변수>를 입력하면 된다.

public class GenericPrinter<T> {
    private T material;

    public void setMaterial(T material) {
        this.material = material;
    }

    public T getMaterial() {
        return material;
    }
}

 

<T extends 클래스>

위의 예시에서, T 대신에 사용될 자료형을 제한하기 위해서는 아래의 방법을 이용하면 된다.

public class GenericPrinter<T extends Material> {
    private T material;
    (생략)

 

이 경우 Material 클래스에 정의된 메서드를 공유할 수 있다.

 

 

자료형 매개 변수가 두 개 이상인 경우

자료형 매개 변수가 두 개 이상인 경우는 아래와 같이 코드를 짠다.

public class GenericPrinter<T, V> {
    T x;
    V y;

    Point(T x, V y) {
        this.x = x;
        this.y = y;
    }

    public T getX() { return x; }    // 지네릭 메서드
    public V getY() { return y; }
}

 

 

 

 

 

(출처: 유튜브 남궁성의 정석코딩)

반응형