개발놀이터

자바 제네릭 본문

Java

자바 제네릭

마늘냄새폴폴 2021. 8. 9. 04:55

자바에서 제네릭(generic)이란 데이터 타입을 일반화한다(generalize)는 것을 의미한다.
제네릭은 클래스나 메소드에서 사용할 내부 데이터 타입을 컴파일 시에 미리 지정하는 방법이다.
이렇게 컴파일시에 미리 타입 검사를 수행하면 다음과 같은 장점을 지닌다.

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


*제네릭의 선언 및 생성
자바에서 제네릭은 클래스와 메소드에만 다음과 같은 방법으로 선언할 수 있다.

class MyArray<T> {
    T element;

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

    T getElement() { return element; }
}

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

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

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

위의 예제는 MyArray 클래스에 사용된 타입 변수로  Integer 타입을 사용하는 예제이다.
위처럼 제네릭 클래스를 생성할 때 사용할 실제 타입을 명시하면, 내부적으로는 정의된 타입 변수가 명시된 실제 타입으로 변환되어 처리된다.

또한 Java SE 7부터 인스턴스 생성 시 타입을 추정할 수 있는 경우에는 타입을 생략할 수 있다.

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


*제네릭의 제거 시기
자바 코드에서 선언되고 사용된 제네릭 타입은 컴파일 시 컴파일러에 의해 자동으로 검사되어 타입 변환됩니다.
그리고서 코드 내의 모든 제네릭 타입은 제거되어, 컴파일된 class 파일에는 어떠한 제네릭 타입도 포함되지 않게 됩니다. 이런 식으로 동작하는 이유는 제네릭을 사용하지 않는 코드와의 호환성을 유지하기 위해서입니다.

'Java' 카테고리의 다른 글

자바 Map컬렉션 클래스  (0) 2021.08.10
자바 Stack 과 Queue  (0) 2021.08.09
자바 List 컬렉션 클래스  (0) 2021.08.09
자바 인터페이스  (0) 2021.08.09
자바 추상클래스  (0) 2021.08.09