6. 지네릭스(Generics)
- 컴파일시 타입을 체크해주는 기능(JDK 1.5)
- 목적: 안정성 향상(객체 타입 제한), 편의성 향상(형변환 불필요)
1) 특징
- 클래스 작성시 Object 타입 대신 T와 같은 타입변수 사용(T: 타입변수명 예시)
- 참조변수, 생성자에 타입변수 대신 실제 타입을 지정하면 형변환 생략 가능
- static멤버에는 타입 변수 사용 불가(타입변수는 인스턴스 변수로 간주)
- 지네릭 타입 배열 (ex. T[]) 생성 불가
2) 용어
- Box<T>(예시): 지네릭 클래스(T Box 혹은 T의 Box)
- T: 타입 문자/ 타입 변수, 타입 매개변수
- Box: 원시 타입(raw type)
3) 지네릭 클래스와 메소드
- 클래스: Class 클래스명<타입변수>{}
- 메소드: static <타입변수> void 메소드명();
- 클래스 타입 매개변수<T>와 메소드 타입 매개변수 <T>는 별개
- 타입변수가 적용된 객체 생성시 참조변수와 생성자에 대입된 타입이 일치해야 함
4) 와일드 카드 '?'
- 지네릭 타입에 와일드 카드 사용시 여러가지 타입을 대입 가능
- 상속 관계에서만 사용 가능
- <? extends T> : 상한 제한, T와 그 자손만 가능
- <? super T> : 하한 제한, T 와 그 조상만 가능
- <?> (<? extends Object>) : 모든 타입 가능
5) 지네릭 타입의 형변환
- 지네릭 타입과 원시 타입간의 형변환은 불가능
ex) Box box = null; Box<Object> box = null;
box = (Box)objBox; <- 경고 발생(box = 원시 타입)
objBox = (Box<Object>) box; <- 경고 발생 (미확인 타입으로 형변환)
- 와일드 카드가 사용된 지네릭 타입으로는 형변환 가능
ex) Box<? extends Object> wBox = new Box<String>(); <- 가능
FruitBox<? extends Fruit> box = null;
FruitBox<Apple> appleBox=(FruitBox<Apple>)box; <- 경고 발생(미확인 타입으로 형변환)
'프로그래밍 > Java' 카테고리의 다른 글
[Java 요약 정리] 8. 애너테이션(Annotation) (0) | 2018.12.26 |
---|---|
[Java 요약 정리] 7. 열거형(Enums) (0) | 2018.12.26 |
[Java 요약 정리] 5. 컬렉션 프레임워크(Collections Framework) (0) | 2018.12.26 |
[Java 요약 정리] 4. 날짜와 시간 (0) | 2018.12.23 |
[Java 요약 정리] 3. java.lang 패키지 (0) | 2018.12.23 |