👩‍💻 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 클래스이다. 

ArrayList는 지네릭스 클래스로 변경됨