1. 지네릭스란?
: 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입체크를 해주는 기능이다.
: 객체의 타입을 컴파일 시에 체크하기 때문에 객체의 타입 안정성을 높이고 형변환의 번거로움이 줄어든다.
지네릭스의 장점
1. 타입 안정성을 제공
2. 타입체크와 형변환을 생략할 수 있으므로 코드가 간결해 진다.
2. 지네릭 클래스의 선언
class Box {
Object item;
void setItem(Object item) { this.item = item; }
Object getItem() { return item; }
}
// 지네릭 클래스로 변경
class Box<T> {
T item;
void setItem(T item) { this.item = item; }
T getItem() { return item; }
}
- Box<T> 에서 T를 '타입 변수'라고 한다.
- 타입 변수가 여러 개인 경우에는 Map<K,V> 와 같이 콤마를 구분자로 나열한다.
▶ 기호의 종류만 다를 뿐 '임의의 참조형 타입'을 의미한다는 것은 모두 같다.
- 이제 지네릭 클래스가 된 Box클래스의 객체를 생성할 때는 참조변수와 생성자에 타입 T대신에,
사용될 실제 타입을 지정해주어야 한다.
Box<Stirng> b = new Box<String>(); // 타입 T 대신, 실제 타입을 지정
b.setItem(new Object()); // 에러. String이외의 타입은 지정불가
b.setItem("ABC"); // OK. String타입이므로 가능
String item = b.getItem(); // 형 변환이 필요없음
2.1 지네릭스의 용어
class Box<T> {}
Box<T> | 지네릭 클래스. 'T의 Box' 또는 'T Box'라고 읽는다. |
T | 타입 변수 또는 타입 매개변수. (T는 타입 문자) |
Box | 원시 타입(raw type) |
Box<String> b = new Box<String>();
▶ Box<String> b : 지네릭 타입 호출
2.2 지네릭스의 제한
: 지네릭 클래스 Box의 객체를 생성할 때, 객체별로 다른 타입을 지정하는 것이 적절하다.
Box<Apple> appleBox = new Box<Apple>(); // Apple 객체만 저장가능
Box<Grape> grapeBox = new Box<Grape>(); // Grape 객체만 저장가능
※ static멤버에 타입 변수 T를 사용할 수 없다. T는 인스턴스 변수로 간주되기 때문.
class Box<T> {
static T item; // 에러
static int compare(T t1, T t2) {...{. // 에러
...
}
※ 지네릭 배열을 생성하는 것도 허용되지 않는다.
class Box<T> {
T[] itemArr; // Ok. T타입의 배열을 위한 참조변수
T[] toArray() {
T[] tmpArr = new T[itemArr.length]; // 에러. 지네릭 배열 생성불가
return tmpArr;
}
}
: 위의 코드에 정의된 Box<T>클래스를 컴파일하는 시점에서는 T가 어떤 타입이 될지 전혀 알 수 없음.
▶ instanceof연산자, new 연산자는 T를 피연산자로 사용 불가.
'Language > java' 카테고리의 다른 글
[Java] 지네릭스_제한된 지네릭 클래스 (0) | 2022.07.29 |
---|---|
[Java] 지네릭스_지네릭 클래스의 객체 생성과 사용 (0) | 2022.07.29 |
[Java] 컬렉션 프레임윅 (Collections) (0) | 2022.07.28 |
[Java] 컬렉션 프레임윅 (HastMap과 Hashtable) (0) | 2022.07.27 |
[Java] 컬렉션 프레임윅 (TreeSet) (0) | 2022.07.27 |
댓글