Generics

0

Generic

목록 보기
1/6

지네릭스(Generics)란?

  • 컴파일시 타입을 체크해 주는 기능(compile time type check) - JDK 1.5
  • 객체의 타입 안정성을 높이고 형변환의 번거로움을 줄여줌
		ArrayList list = new ArrayList();
		list.add(10);
		list.add(20);
		list.add("30"); // String을 추가
		
		Integer i = (Integer)list.get(2); // 컴파일 ok

위 코드를 실행해보면 java.lang.ClassCastException 에러를 발생시키는데 이는 컴파일 단계에서 에러를 찾지 못하고 실행 단계에서 문제를 찾는다는 것이다.

위처럼 지네릭스를 사용하게 되면 타입체크가 강화되어 개발할 때 큰 도움을 준다.

장점

  1. 타입 안정성을 제공한다.(ClassCastException 형변환 에러를 방지할 수 있다)
  2. 타입체크와 형변환을 생략할 수 있으므로 코드가 간결해 진다.

타입 변수

  • 클래스를 작성할 때, Object타입(일반클래스) 대신 타입변수(E)(지네릭 클래스)를 선언해서 사용
public class ArrayList extends AbstractList{
	private transient Object[] elementData;
    public boolean add(Object o){ } 
    public Object get(int index){ } 
    
}

public class ArrayList<E> extends AbstractList<E> {
	private transient E[] elementData;
    public boolean add(E o){ } 
    public E get(int index){ } 
    
}

보통 타입변수의 이름은 (보통)T, E와 같은 대문자 한글자로 쓴다.

타입 변수에 대입하기

  • 객체를 생성시, 타입 변수(E) 대신 실제 타입을 지정(대입)
  • 타입 변수 대신 실제 타입이 지정되면, 형변환 생략 가능
ArrayList tvList = new ArrayList();
tvList.add(new TV());
TV t = (TV)tvList.get(0);

ArrayList<TV> tvList = new ArrayList<TV>();
tvList.add(new TV());
TV t = tvList.get(0); // 형변환 불필요

0개의 댓글