지네릭스(generics)

Kuno17·2023년 5월 10일
0

CS공부

목록 보기
9/17
post-thumbnail

지네릭스

다양한 타입의 객체들을 다루는 메서드나 컬렉션 클렉스에 컴파일시의 타입을 체크해주는 기능.

Arraylist list = new ArrayList()
lsit.add(10);
lsit.add(20);
lsit.add("30"); // String을 추가.

Integer i = (Integer)list.get(2); // 컴파일러가 체크, 컴파일 에러 발생.

다음코드를 실행하면 형변환 에러가 발생한다.
실행 후 에러(런타임 에러)가 나는것 보다. 컴파일시 에러를 가져오는것이 좋기 떄문에 만들어진 방법이다.
즉 컴파일러에게 더 많은 정보를 제공해준다.

Arraylist<Integer> list = new ArrayList<Integer>()
lsit.add(10); //list.add(new Integer(10));
lsit.add(20);
lsit.add("30"); // String을 추가. >컴파일러가 미리 타입에러를 감지한다.

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

<Integer>타입으로 지정했기 때문에 형변환이 생략이 가능하다.
<Object>로 할경우 기존처럼 모든 객체의 타입이 가능하다.

지네릭스 타입을 사용해야하는 경우 반드시 생략하지 않고 붙여서 작성할 필요가 있다.

지네릭스 장점

  1. 타입 안정성을 제공한다. ( 형변환 에러(Class castException) 줄일 수 있다 )
  2. 컴파일 시점에서 에러를 확인할 수 있다.
  3. 타입체크와 형변환을 생략할 수 있으므로 코드가 간결해 진다.
  • 다음 예시와 같이 제네릭을 사용하지 않는 경우 불필요한 타입 변환이 필요하게 된다.
    list에는 Object로 저장할 수 있다 이렇게 되면 저장할 때 타입 변환이 발생하고 읽어올 때에도 타입 변환이 발생한다.
List list = new ArrayList();
list.add(1);
list.add("5");
list.add(0.1);

Object o1 = list.get(0);
Object o2 = list.get(1);
Object o3 = list.get(2);

Integer num = (Integer) o1;
String str = (String) o2;
Long L = (Long) o3;

제네릭을 사용할경우 List에 저장요소를 Integer로 제한하기 때문에 get(idx)할 경우 타입변환이 필요 없게 되어 프로그램 성능이 향상된다.

profile
자바 스터디 정리 - 하단 홈 버튼 참조.

0개의 댓글