본문 바로가기

JAVA

지네릭스

지네릭스란?

컴파일 시 타입을 체크해주는 기능.

지네릭스가 생기기 전에는 컴파일러가 컴파일 단계에서 형변환 에러를 잡지 못하고 런타임 에러가 발생했다.

그래서 컴파일 단계에서 에러가 발생하게 하기 위해 (=컴파일러를 도와주기 위해) 지네릭스가 생겼다.

ClassCastException(형변환 에러)이 발생하지 않도록 막아준다.

 

 

첫 번째 장점.

타입의 안정성 제공 -> 타입 체크를 정확하게 해 줌

 

ArrayList는 Object 타입으로 모든 객체를 반환한다. (즉, 다양한 객체를 담을 수 있다는 뜻)

하지만 보통 한 종류의 객체를 담는 경우가 많다. 그래서 아예 지네릭 타입으로 객체를 지정해준다.

 

지네릭 타입과 일치하지 않는 Audio()를 추가하려고 하면 컴파일 에러가 발생한다.

 

ArrayList<Tv> tvList = new ArrayList<Tv>();

tvList.add(new Tv()); // OK
tvList.add(new Audio()); // 컴파일 에러

 

 

 

두 번째 장점.

타입 체크와 형변환을 생략할 수 있으므로 코드가 간결해진다.

 

// 지네릭스를 적용하지 않은 코드

ArrayList tvList = new ArrayList();

tvList.add(new Tv());

Tv t = (Tv)tvList.get(0); // tvList.get(0)의 반환 타입이 Object이므로 Tv 타입으로 형변환


// 지네릭스를 적용한 코드

ArrayList<Tv> tvList = new ArrayList<Tv>();

tvList.add(new Tv());

Tv t = tvList.get(0); // 지네릭스가 적용되어 형변환없이 값을 꺼내올 수 있음

 

 

지네릭 타입과 다형성

참조 변수에 지정해준 지네릭 타입과 생성자에 지정해준 지네릭 타입이 꼭 일치해야 한다.

일치하기만 하면 클래스 타입 간의 형변환에도 문제없다.

 

ArrayList<Tv> list = new ArrayList<Tv>(); // OK

ArrayList<Product> list = new ArrayList<Tv>(); // 에러. 지네릭 타입 불일치

List<Tv> list = new ArrayList<Tv>(); // OK

'JAVA' 카테고리의 다른 글

static은 언제 붙일까?  (0) 2021.01.14
Comparator / Comparable 인터페이스  (0) 2021.01.12
Collection 클래스 정리  (0) 2021.01.10
Collections  (0) 2021.01.10
HashMap  (0) 2021.01.08