본문 바로가기
개인공부

지네릭스 (Generics)

by 리승우 2022. 8. 21.

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

> 객체의 타입 안정성을 높이고, 형변환의 번거로움을 줄여줌

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

댓글