Java - 지네릭스(Generics), 타입 변수

춤추는개발자·2022년 12월 6일
0

Java 정리

목록 보기
53/59

지네릭스(Generics)

  • 컴파일시 타입을 체크해 주는 기능
  • 객체의 타입 안정성을 높이고 형변환의 번거로움을 줄여준다.

지네릭스의 장점

  • 타입 안정성을 제공합니다. 지네릭스로 지정한 타입 이외의 타입이 저장되는것을 미리 차단할 수 있습니다.
  • 타입체크와 형변환을 생략할 수 있으므로 코드가 간결해 집니다.

타입 변수

  • 클래스를 작성할 때, Object타입 대신 타입 변수(E)를 선언해서 사용한다.
  • 객체를 생성시,<>에 타입 변수(E) 대신 실제 타입을 지정한다. 이렇게 하면 실제 타입이 타입 변수에 대입이 된다. 예를 들어 코드로 보면
ArrayList<타입> list = new ArryList<타입>();

위와 같이 참조변수의 타입 옆에 <타입>을 적어주고 생성자 옆에 <타입>을 적어주면 된다. 단 두 타입은 일치해야 한다.

  • 타입 변수 대신 실제 타입이 지정되면, 형변환은 그 객체의 데이터를 읽기,쓰기등을 할때 생략이 가능합니다.

지네릭스 용어

  • Box < T > : 지네릭 클래스, T의 Box또는 T Box라고 읽습니다.
  • T : 타입 변수 또는 타입 매개변수, 실제 타입을 대입한다.
  • Box : 원시 타입, 일반 클래스일때의 원래 타입

지네릭 타입과 다형성

  • 참조 변수와 생성자의 대입된 타입은 일치해야 한다.
ArrayList<String> list = new ArrayList<String>();
ArrayList<Integer> list = new ArrayList<Integer>();

위와 같이 일치해야 한다. 조상과 자손의 관계라도 불가하다.

  • 지네릭 클래스간의 다형성은 성립한다. 대입된 타입은 일치해야한다.
List<String> list = new ArrayList<String>();
Set<<String> set = new hashSet<String>();
  • 매개변수의 다형성도 성립한다.
ArrayList<Sport> list = new ArrayList<Sport>();
list.add(new Sport());
list.add(new Soccer());
list.add(new Baseball());
Sport s = list.get(0);
Soccer s2  = (Soccer)list.get(1);
Baseball b = (Baseball)list.get(2);

만약 Soccer, Baseball 클래스가 Sport 클래스를 상속 받고 있다면 매개변수로 저장할 수 있다. get() 메서드로 값을 불러오려면 반환 타입입 Sport이기 때문에 자손 클래스 타입에 값을 저장하려면 형변환을 해줘야 합니다.

0개의 댓글