지네릭스(Generics)란?
(영어 - generic) 포괄적인, 일반적인
- 컴파일시 타입을 체크해 주는 기능 ( compile - time type check) - JDK5 부터
- 객체의 타입 안정성을 높이고 형변환의 번거로움을 줄여줌
( 하나의 컬렉션을 대부분 한 종류의 객체만 저장)
장점.
1. 타입의 안정성을 제공
2. 타입의 체크와 형변환을 생략할 수 있으므로 코드가 간결!!
※(Box<T> 의 객체 생성. 참조변수와 생성자에 대입된 타입이 일치해야 한다)
용어
Box<T> ==>지네릭 클래스 T의 box ,또는 T Box T ==>타입변수 또는 타입 매개변수(T는 타입 문자) Box ==>원시 타입( raw type) |
제한
static 멤버에는 타입변수T를 사용할수 없다,
static T item; // 에러
static int compare(T t1,T t2} {...} / / 에러
배열 T[ ] 를 생성하는 것은 안된다.
class Box<T> -- T[ ] itemArr;// T타입의 배열을 위한 참조변수는 가능 T[ ] tmpArr = new T[itemArr.length]; // 지네릭 배열을 생성은 불가 return tmpArr; } ...
|
제한된 지네릭 클래스
지네릭 타입에 'extends' 를 사용하면 , 특정타입의 자손들만 대입할 수 있게 제한할 수 있다.
-add()의 매개변수의 타입 T 도 Fruit 와 그 자손 타입이 될수 있다.
-인터페이스 의 경우에도 'implements' 가 아닌 'extends' 를 사용
와일드 카드 ?
지네릭 타입에 와일드 카드를 쓰면 여러타입을 대입가능
<? extends T> 와일드 카드의 상한제한 T 와 자손들만 가능
<? super T> 와일드 칻의 하한제한 T와 그 조상들만
<?> 제한없음 모든 타입이 가능<? extends Object>
(p.s 와일드 카드가 사용 된 지네릭 타입으로는 형변환 불가 )
왜 쓸까????
타입의 안정성과 코드 중복 제거의 문제해결을 위해서
제네릭화 하도록한다.
남궁성의 자바의 정석 참조
'프로그래밍 > JAVA' 카테고리의 다른 글
[JAVA] 문자열중 가운데 글자 출력 (0) | 2018.01.02 |
---|---|
[Java] Thread(쓰레드) (0) | 2017.12.20 |
[Java]Collections Framework (0) | 2017.12.18 |
[Java]클래스 메서드 & 인스턴스 메서드 (0) | 2017.12.15 |
[Java]객체지향 -다향성 및 instanceOf 연산자 (0) | 2017.12.14 |