Ch12-2~3. 타입 변수
0. 목차
Chapter12. 지네릭스, 열거형, 애너테이션
Ch12 - 2. 타입 변수
Ch12 - 3. 타입 변수 대입하기
Ch12 - 2. 타입 변수
▶ 타입 변수란?
▷ 지네릭 클래스 작성 시, Object 타입 대신 타입 변수<E>
를 선언하여 사용
▷ Object 타입 - 일반 클래스 → <E>
- 지네릭 클래스
- 일반 클래스
public class ArrayList extends AbstractList { private transient Object[] elementData; public boolean add(Object o) { ... } public Object get(int index) { ... } ... }
- 지네릭 클래스
public class ArrayList<E> extends AbstractList<E> { private transient E[] elementData; public boolean add(E o) { ... } public E get(int index) { ... } ... }
- JDK1.5부터 지네릭 클래스로 변경
- Object는 타입 변수’E’로 작성(타입 변수 변경 가능)
Ch12 - 3. 타입 변수 대입하기
▶ 타입 변수 대입하기란?
▷ 객체 생성 시, 타입 변수 대신 실제 타입을 지정(대입)
// 타입 변수 E 대신 실제 타입 Tv를 대입
ArrayList<E>tvList = new ArrayList<E>();
/* ↓↓↓↓↓
변경
↓↓↓↓↓ */
ArrayList<Tv>tvList = new ArrayList<Tv>();
▷ 타입 변수 대신 실제 타입이 지정되면, 형변환 생략 가능
<E>
가 있을 때, Object라서 형변환 필요
ArrayList tvList = new ArrayList(); tvList.add(new Tv()); Tv t = (Tv)tvList.get(0); // Object 타입을 Tv로 형변환
<Tv>
가 있을 때, 실제 타입이라서 형변환 불필요
ArrayList<Tv>tvList = new ArrayList<Tv>(); tvList.add(new Tv()); Tv t = tvList.get(0); // Tv 타입밖에 없으니까 형변환 불필요
▶ 실습
▷ <E>
로 Tv타입 꺼내보기
package baek;
import java.util.ArrayList;
class Play {
public static void main(String[] args) {
ArrayList<E>tvList = new ArrayList<E>();
tvList.add(new Tv());
Tv t = tvList.get(0); // ERROR!, Object니까 Tv타입으로 안 꺼내짐
System.out.println(t);
}
}
class Tv { }
class Audio { }
// console
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
E cannot be resolved to a type
E cannot be resolved to a type
at baek.Play.main(Play.java:8)
▷ <Tv>
로 Tv타입 꺼내보기
package baek;
import java.util.ArrayList;
class Play {
public static void main(String[] args) {
ArrayList<Tv>tvList = new ArrayList<Tv>();
tvList.add(new Tv());
Tv t = tvList.get(0);
System.out.println(t);
}
}
class Tv { }
class Audio { }
// console
baek.Tv@4926097b // 오류 안남