본문 바로가기
Java의 정석/제네릭스, 열거형, 어노테이션

타입 변수 / 제네릭스 용어 / 제네릭 타입과 다형성

by Hwanii_ 2023. 10. 11.
728x90

타입 변수 란 ?

 

1.

클래스를 작성 할 때, Object 타입 대신에 타입 변수 (E) 를 선언 해서 사용.

 

 

JDK 1.5 버전 이전의 ArrayList 일반 클래스

 

 

JDK 1.5 버전 이후의 제네릭 개념이 도입된 후 ArrayList 제네릭 클래스

 

보통 변수명은 Type을 의미하는 T 또는 Element를 의미하는 E로 작성 한다.

 

 

 

2.

타입 변수에 대입 하기

 

객체를 생성 할 때, 타입 변수 (E) 대신에 실제 타입을 지정 (대입) 한다.

 

타입 변수 대신에 실제 타입이 지정 되면 형변환이 생략 가능 하다.

 

예시 ) 

 

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

//	참조변수 오른쪽
//	생성자 왼쪽

 

그러면 아래와 같이 변하게 된다.

 

 

 

 

 

 

제네릭스 용어 란 ?

 

1.

Box<T> 

제네릭 클래스. 'T 의 Box' 또는 T Box' 라고 읽는다.

 

2.

T

타입 변수 또는 타입 매개 변수 (T는 타입 문자)

 

3.

Box

원시 타입 (raw type)

 

 

 

 

 

 

 

제네릭 타입과 다형성

 

참조 변수와 생성자의 대입된 타입은 반드시 일치 해야 한다.

 

ArrayList<Tv> list = new ArrayList<Tv>();	//	OK 일치.

ArrayList<Product> list = new ArrayList<Tv>();	//	에러 불일치.

 

제네릭 클래스간의 다형성은 성립 된다. (하지만 대입된 타입은 반드시 일치 해야 한다)

 

List<Tv> list = new ArrayList<Tv>();	//	OK. 다형성. ArrayList가 List 인터페이스를 구현

List<Tv> list = new LinkedList<Tv>();	//	OK. 다형성. LinkedList가 List 인터페이스를 구현

 

매개변수의 다형성도 성립 된다.

 

ArrayList<Product> list = new ArrayList<Product>();

list.add(new Product());

list.add(new Tv());	//	Tv 객체가 Product 클래스의 자손이라면 OK.

list.add(new Audio());	//	Audio 객체가 Product 클래스의 자손이라면 OK.

 

예시 )

 

반응형

'Java의 정석 > 제네릭스, 열거형, 어노테이션' 카테고리의 다른 글

제네릭스 (Generics)  (1) 2023.10.11