Back-end/JAVA,Spring

제네릭 Generic 이란?

cheersHena 2018. 10. 18. 15:40
반응형

제네릭 Generic

데이터 타입 Type 을 일반화 generalize 한다 : 클래스나 메소드에서 사용할 내부 데이터 타입을 컴파일 시에 미리 지정하는 방법.  즉, 컴파일 시 미리 타입 검사 type Check를 수행.


why?

클래스나 메소드 내부에서 사용되는 객체의 타입 안정성을 높일 수 있다.

반환값에 대한 타입변환 및 타입검사에 들어가는 노력과 시간을 줄일 수 있다.


이전에는 여러타입을 사용하는 대부분의 클래스나 메소드에서 인수나 반환값으로 주로 Object를 사용여 반환된 Object객체를 다시 원하는 타입으로 변환시 오류발생 가능성이 있다.

하지만 jdk1.5부터 도입된 제네릭을 사용하면 컴파일시 미리 타입이 정해지므로, 타입검사나 변환 같은 번거로운 작업을 생략할 수 있다.


제네릭의 선언 및 생성

예제

class MyArray<T> {

    T element;

    void setElement(T element) { 

    this.element = element; 

    }

    T getElement() { 

    return element; 

    }

}


예제의 'T'변수를 타입변수 type variable라고 하며  임의의 참조형 타입을 의미한다.

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


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

MyArray 클래스에 사용된 타입 변수로 Integer 타입을 사용하는 예제.

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

**자바에서 타입 변수 자리에 사용할 실제 타입을 명시할 때 기본 타입을 바로 사용할 수는 없다. 위 예제의 Integer와 같이 래퍼(wrapper) 클래스를 사용해야만 함..



ex) ArrayList<HashMap <String, Object>> list 

= new ArrayList<HashMap <String, Object>>();

: 맵 타입을 사용하는 어레이리스트. 

리스트 안의 맵의 타입은 Key: String / Value: Object 라는 의미.




반응형