Notice
Recent Posts
Recent Comments
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

충분히 쌓여가는

지네릭스 Generices 본문

Java/JAVA3

지네릭스 Generices

빌드이너프 2023. 7. 25. 09:10

Generices

컴파일시 타입을 체크해 주는 기능(compile-time type check)

ArrayList<Tv> tvList = new ArrayList<Tv>();

tvList.add(new Tv()); // OK
tvList.add(new Audio()); // 컴파일 에러, Tv 외에 다른 타입은 저장 불가

 

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

 

지네릭스의 장점

1. 타입 안정성을 제공

2. 타입체크와 형변환을 생략할 수 있으므로 코드가 간결해진다


코드

ClassCastException 발생: 컴파일러는 list.get(2)의 type가 Object라서 (Integer)를 허용하지만 실제로 list 안에 어떤 것이 들어있는지 확인할 수 없다

차라리 실행 시 발생하는 에러보다 컴파일 도중 발생하는 에러가 훨씬 낫다

import java.util.ArrayList;

public class GenericTest {
    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 GenericTest.main(GenericTest.java:10)

 

<Integer> 추가

이미 <Integer>로 Integer 타입만 들어올 수 있다는 것을 알기 때문에 (Integer)로 형변환을 할 필요가 없다

import java.util.ArrayList;

public class GenericTest {
    public static void main(String[] args) {
        ArrayList<Integer> list = new ArrayList<>();
        list.add(10); // list.add(new Integer(10));
        list.add(20);
        list.add(30); // 타입 체크 강화, 지네릭스

        // Integer i = (Integer)list.get(2);
        Integer i = list.get(2); // 형변환 생략 가능

        System.out.println(list);
    }
}

[10, 20, 30]

 

여러종류의 타입을 저장하고 싶은 경우 <Object> 사용

대신 형변환(String) 사용해야됨

import java.util.ArrayList;

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

        String i = (String)list.get(2);

        System.out.println(list);
    }
}

[10, 20, 30]

 

'Java > JAVA3' 카테고리의 다른 글

지네릭 메서드  (0) 2023.07.28
와일드 카드 <?>, 지네릭 메서드  (0) 2023.07.28
제한된 지네릭 클래스, 지네릭스의 제약  (0) 2023.07.27
지네릭스 용어, 지네릭 타입과 다형성  (0) 2023.07.26
타입 변수  (0) 2023.07.25