👩💻 BackEnd/☕️ 자바 [Java]
[자바의 정석] 12-1. 지네릭스란?
minhe2810
2024. 1. 4. 09:55
12-1. Generics란?
- 컴파일시 타입을 체크해주는 기능 - JDK 1.5
- 객체의 타입 안정성을 높이고 형변환의 번거로움을 줄여줌
TV 타입의 객체만 저장할 수 있는 ArrayList
ArrayList<TV> tvList = new ArrayList<TV>
public class GenericTest {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList(); // <Integer> 타입 정보를 사전에 제공.
list.add(10);
list.add(20);
list.add("30"); // String 을 추가 -> 컴파일 에러
Integer i = list.get(2); // 형변환 생략 가능. Integer 인 것을 아니까 형변환 해줄 필요가 없음.
System.out.println("list = " + list);
// 지네릭스 덕분에 타입 체크가 강화됨.
// 만약 여러개의 타입을 넣고 싶을 경우에는 타입을 <object>로 잡아주기.
ArrayList<Object> list2 = new ArrayList<Object>();
list2.add(10);
list2.add(20);
list2.add("30");
String i2 = (String) list2.get(2); // 꺼낼 때는 형변환 해주기
System.out.println("list2 = " + list2);
}
}
지네릭스의 장점
1. 타입 안정성을 제공한다. -> Class Cast Exception (형변환 에러) 막을 수 있음.
1-1. 실행 중 발생하는 런타임 에러를 컴파일타임 에러로 바꿔 프로그램을 실행시키기 전에 에러를 발견하고 수정 가능해짐.
2. 타입 체크와 형변환을 생략할 수 있어 코드가 간결해진다.
ArrayList 는 JDK 1.5 이상의 버전 부터는 일반 클래스가 아닌 Genrics 클래스로 변경됨!
따라서 ArrayList 는 <>으로 타입을 명시적으로 적어줘야 함. (클래스 안에 Object 타입이 존재하는 것들이 바뀜)
but, 안 적는다고 오류가 나지는 않음.
클래스 이름 옆에 "<E>" 이런식으로 문자가 적혀있는 것은 모두 Generics 클래스이다.