자바의 정석 - 제너릭

송용준·2023년 5월 8일

제너릭이란?

  • 컴파일시 타입을 체크해 주는 기능. 지정값만 들어올 수 있게 정해놓음
  • 객체의 타입 안정성을 높이고 형변환의 번거로움을 줄여줌
    import java.util.*;

class Java {
public static void main(String[] args) {
ArrayList list = new ArrayList<>();
list.add(10);
list.add(20);
list.add("30"); // String 추가

	Integer i = (Integer)list.get(2);		// 컴파일 OK. 실행시 오류
	
	System.out.println(list);
}

}

코드상 문제가 없는데 실행시 오류가 나옴(형변환 에러)
Exception in thread "main" java.lang.ClassCastException: class java.lang.String cannot be cast to class java.lang.Integer (java.lang.String and java.lang.Integer are in module java.base of loader 'bootstrap') at ff.Java.main(Java.java:12)

실행시 오류보다 컴파일 에러가 나음. 실행시 오류가 나면 실행시 죽음. 미리확인해서 수정하는게 좋음 
실행시 오류를 컴파일 에러로 끌고 오는게 제너릭
이미 타입을 지정했으니 형 변환도 생략 가능

### 타입 변수
- 제너릭 클래스를 작성할 때, Object타입 대신 타입 변수를 선언해서 사용
![](https://velog.velcdn.com/images/dragon_jun/post/f7699a39-1bf4-41d3-8d42-2e40d0586c80/image.png)

타입변수는 뭐를 써도 상관 없으나 Type을 따서 T를 쓰거나 Element를 따서 E를 사용하는게 정석

### 타입 변수에 대입하기
- 객체를 생성시, 타입 변수(E) 대신 실제 타입(Tv)을 지정(대입)
- 타입 변수 대신 실제 타입이 지정되면, 형변환 생략 가능

--> 옛날에는 Object타입이라 형변환이 필요했는데 제너릭 덕분에 형변환 불필요
profile
용용

0개의 댓글