티스토리 뷰
제네릭(일반화)
객체 생성 시 데이터타입을 지정하여 사용하도록 하는 기법
- 객체를 생성할 때마다 다른 데이터타입으로 사용 가능하다. 데이터타입은 참조데이터 타입만 지정 가능
- 제네릭 타입 지정 생략 시 모든 데이터타입은 Object로 고정된다.
제네릭 타입 사용 시 주의사항
static, new 연산자, instanceof 연산자 사용 시 제네릭 타입의 파라미터를 사용할 수 없다.
사용 시점에서 데이터타입 확인이 불가능하기 때문!
Integer 타입만 허용하는 객체를 생성할 경우
List<Integer> li = new ArrayList<Integer>();
다른 타입의 데이터가 입력되면 에러가 난다.
li.add(1);
li.add("2"); // 컴파일에러
li.add(3.14); // 컴파일에러
li.add(2);
li.add(3);
데이터 출력
for(int i=0; i < li.size(); i++) {
int data = li.get(i); // 오토언박싱
System.out.println(data);
}
Integer 에서 int로 오토 언박싱 된다.
특정 데이터타입만 저장되기 때문에 타입 판별할 instanceof 연산자가 필요하지 않다.
Map 계열 객체 생성 시 제네릭 타입 지정은 Key, Value 순으로 지정된다.
Map<Integer, String> map = new HashMap<Integer, String>();
map.put(1, "김김김");
map.put(2, 10); // 컴파일오류
map.put("3", "박박박"); // 컴파일오류
제네릭을 사용한 클래스 정의
실제 데이터타입으로 사용할 순 없으나 제네릭 타입에서 임시로 설정하여 관리한다
<> 기호 안 가상의 데이터 타입은 자유롭게 지정 가능하나 주로 E(element), T(type)을 사용한다(예시에서는 R을 씀)
class GenericC<R> {
R data;
public R getData() {
return data;
}
public void setData(R data) {
this.data = data;
}
}
다음과 같이 객체를 생성해 사용이 가능하다.
제네릭 타입 지정을 생략하면 Object 타입으로 지정된다.
// Integer 타입으로 사용한 경우
GenericC<Integer> gc = new GenericC<Integer>();
gc.setData(1);
System.out.println(gc.getData());
int num = gc.getData();
// Double 타입으로 사용한 경우
GenericC<Double> gc2 = new GenericC<Double>();
gc2.setData(3.14);
double num2 = gc2.getData();
// String 타입으로 사용한 경우
GenericC<String> gc3 = new GenericC<String>();
gc3.setData("배고픔");
String sData = gc3.getData();
// 만들어둔 Person 타입으로 사용한 경우
GenericC<Person> gc4 = new GenericC<Person>();
gc4.setData(new Person("홍길동", 20));
Person p = gc4.getData();
'배운 것 기록 > java' 카테고리의 다른 글
Thread (0) | 2022.06.28 |
---|---|
StringBuilder / StringBuffer (0) | 2022.06.25 |
String 메서드 (0) | 2022.06.21 |
Iterator, Map (0) | 2022.06.20 |
Stack, Queue (0) | 2022.06.19 |
댓글