[CS] 제네릭(Generic)

hyewon jeong·2023년 3월 29일
0

CS

목록 보기
6/22

1.제네릭

1-1. 제네릭이란?

제네릭이란 데이터 타입을 일반화한다는 것의 의미하는데

다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 객체의 타입을 미리 명시해줌으로써 번거로운 형변환을 줄여주고
컴파일 시에 객체의 타입을 체크하기 때문에 런타임에 발생할 수 있는 오류를 줄여준다.

제네릭 클래스나 컬렉션 클래스에 < > 부호를 붙이고 타입변수나 타입을 적어주면 된다.

  • 타입변수 - Type(T), Element(E), Key(K), Value(V) 등이 있다.
    상황에 맞게 의미있는 문자를 선택해서 사용하는 것이 좋다.

1-2. 제네릭의 장점 및 컬렉션 클래스에서 제네렉을 사용하는 이유?

  1. 위의 정의에와 같이 컴파일 시점에 지정해 줌으로서 클래스나 메소드 내부에서 사용되는 객체의 타입을 명시해줌으로 안정성을 높일 수 있습니다

  2. 반환값에 대한 타입 변환 및 타입 검사에 들어가는 노력을 줄일 수 있습니다.
    제네릭이 없었던 경우 (JDK1.5 이전) 여러 타입을 사용하는 대부분의 클래스나 메소드에서 매개변수나 반환값으로 object를 사용했습니다.
    하지만 이 경우에는 반환된 object객체를 다시 원하는 타입으로 타입 변환해야 하며 , 이때 ClassCastException오류가 발생합니다.

    1-1-1 ClassCastException이란?

  • RuntimeException으로 unchecked 예외처리

  • 클래스 형 변환(캐스팅)연산을 잘못 했을때 발생하는 예외

    예를 들어 int형만 담아야 하는 list에 String타입을 넣었다고 가정해봅니다.
    List에서 값을 꺼낼때마다 int으로 캐스트를 할텐데 String이 들어가 있는경우
    상위 타입인 String --> 하위 타입인 int 로 형변환 시 ClassCastException이 발생합니다.

    하지만 제네릭(jdk 1.5도입)을 사용하면 컴파일시점에 타입검사나 타입변환과 같은 번거루운 작업을 생략할 수 있게 됩니다. 이러한 이유로 컬렉션 클래스에서 제네릭을 사용합니다.

제네릭의 선언 및 생성

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

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) 등이 있다.)
타입 변수는 클래스에서뿐만 아니라 메소드의 매개변수나 반환값으로도 사용할 수 있습니다.

profile
개발자꿈나무

0개의 댓글