제네릭에 대해서 설명하고, 컬렉션 클래스에서 왜 제네릭을 사용하는 지 설명해주세요.

권성현·2023년 2월 23일
1

면접 준비

목록 보기
7/30

제네릭(generic)이란?

자바에서 제네릭(generic)이란 데이터의 타입(data type)을 일반화한다(generalize)는 것을 의미합니다.

클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 방법.
클래스를 선언하여 객체를 생성할 때 구체적인 타입을 기재한다. 즉, 타입을 어떤 클래스 종류의 매개변수로 보는 것이다.

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

이렇게 컴파일 시에 미리 타입 검사(type check)를 수행하면 다음과 같은 장점을 가집니다.

  1. 클래스나 메소드 내부에서 사용되는 객체의 타입 안정성을 높일 수 있습니다
  2. 반환값에 대한 타입 변환 및 타입 검사에 들어가는 노력을 줄일 수 있습니다.
    3.프로그램의 성능저하를 유발시키는 캐스팅을 제거한다.
    4.코드절약 및 코드 재사용성을 증진시켜 유지보수를 편하게 한다.
    5.컴파일시 타입오류를 체크하여 사전에 엄격한 데이터타입 체크를 가능하게 한다.
    6.자바의 제네릭은 불변(invariance) 이다

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

class MyArray<T> {

    T element;

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

    T getElement() { return element; }

}

위의 예제에서 사용된 'T'를 타입 변수(type variable)라고 하며, 임의의 참조형 타입을 의미합니다.
꼭 'T'뿐만 아니라 어떠한 문자를 사용해도 상관없으며, 여러 개의 타입 변수는 쉼표(,)로 구분하여 명시할 수 있습니다.(* 타입변수 - Type(T), Element(E), Key(K), Value(V) 등이 있다.)
타입 변수는 클래스에서뿐만 아니라 메소드의 매개변수나 반환값으로도 사용할 수 있습니다.

제네릭을 왜 사용할까 ?

  • 제네릭을 사용하기 전에는 객체를 꺼낼때마다 형변환을 해야했다.
    예를들어 int형만 담아야 하는 list에 String 타입을 넣었다고 가정하자.
  • List에서 값을 꺼낼 때 마다 int으로 캐스트를 할 텐데 String이 들어가있는 경우 ClasscastException 이 런타임시에 발생한다.
  • 반면 제네릭을 사용하면 컬렉션(범용화 시킨다 (컬렉션 프레임웍 사용)
    호출하는 쪽에서 자료형을 정하겠다는 뜻)이 담을 수 있는 타입을 컴파일러에 알려주어 타입을 안전하게 사용 가능하다.
profile
개발일지

0개의 댓글