> 컴파일시 타입을 체크해주는 기능
> 객체의 타입 안정성을 높이고, 형변환의 번거로움을 줄여줌
Exception(예외) = Runtime error (실행 중 발생하는 에러)
RuntimeException(프로그래머 실수로 발생한 에러)
import java.util.ArrayList; //ctrl + shift + o 누르면 import문 생성됨
public class Generics {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>();
//Integer 타입만 저장할 수 있는 ArrayList라고 못 박아둠
// 위 작업으로 인해 String 30은 컴파일 오류에 해당됨
list.add(10); //list.add(new Integer(10)); 을 autoboxing으로 표현해도 됨
list.add(20);
list.add("30"); //Generics설정으로 인해 String으로 인한 컴파일 오류에 잡혔음
// 지네릭스 덕분에 타입 체크가 강화되었음
// list.add("30"); //Generics설정을 안 했을 떄는 컴파일 오류에 해당안됨
Integer i = (Integer)list.get(2); //컴파일 OK (컴파이럴의 한계)
System.out.println(list);
}
}
//컴파일 시에 이상은 없으나, 직접 실행해보면 ClassCastException 에러문구가 뜸
// ClassCastException = 형변환 에러 발생할 경우 뜨는 문구
타입변수
> 클래스를 작성할 때, Object타입(일반클래스) 대신 타입 변수(E) (지네릭 클래스)를 선언해서 사용
타입변수에 대입하기
> 객체를 생성시, 타입 변수(E)에 실제 타입(Tv)을 지정(대입)
import java.util.ArrayList; //ctrl + shift + o 누르면 import문 생성됨
class Tv{}
class Audio{}
public class Generics {
public static void main(String[] args) {
ArrayList<Tv> list = new ArrayList<Tv>(); // Tv타입의 객체만 저장가능
list.add(new Tv());
// list.add(new Audio()); //Tv타입의 객체가 아니여서 컴파일 에러에 해당됨
}
}
'개인공부' 카테고리의 다른 글
HashSet (0) | 2022.08.23 |
---|---|
Arrays (0) | 2022.08.22 |
Iterator / ListIterator / Enumeration / Map (0) | 2022.08.17 |
스택과 큐의 활용 (0) | 2022.08.16 |
Stack & Queue (0) | 2022.08.15 |
댓글