- 클래스 정의 시 사용되어질 데이터타입을 미리 명시하지 않고 객체 사용 전 사용할 타입을 객체 생성 시 명시하여 사용하는 기법
- 주로, Collection API의 클래스들이 제네릭이 적용되어 있으므로 인스턴스 생성 시 제네릭 타입으로 사용할 데이터타입을 지정
- 지정된 데이터타입이 클래스 내의 임시 데이터타입을 대체하게 됨
제네릭을 적용하지 않는 일반 클래스 정의
- 사용할 데이터타입을 특정 타입으로 관리하는 일반 클래스
class NormalIntegerClass {
int data;
public int getData() {
return data;
}
public void setData(int data) {
this.data = data;
}
}
NormalIntegerClass nic = new NormalIntegerClass();
nic.data = 10; // 정수 저장 가능
// nic.data = 3.14; // 실수 저장 불가
// nic.data = "땅콩"; // 문자열 저장 불가
} // main()
} // class
➡️여러 데이터타입 데이터를 모두 저장하려면 최소한 Object 타입 변수 선언해야함
2. 클래스 내에서 사용되어질 데이터에 대한 타입을 Object 타입으로 관리하는 경우
class NormalObjectClass {
Object data;
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
}
➡️멤버변수의 데이터타입을 Object 타입으로 선언할 경우 자바에서 사용되는 모든 데이터 저장 가능
➡️이때, 각 데이터들은 Object 타입으로 업캐스팅 되어 저장됨
Object
Object |
Number |
Integer |
NormalObjectClass nc = new NormalObjectClass();
nc.setData(1);
nc.setData(3.14);
nc.setData("땅콩");
3. 제네릭 타입 T 를 String 타입으로 지정
GenericClass<String> gc3 = new GenericClass<String>();
// => 타입 T 가 모두 String 타입으로 지정
gc3.setMember("홍길동");
4. 제네릭 타입 T 를 Person 타입으로 지정
Person p = new Person("홍길동", 20);
GenericClass<Person> gc4 = new GenericClass<Person>();
// => 타입 T 가 모두 Person 타입으로 대체됨
gc4.setMember(p);
System.out.println(gc4.getMember());
Person person = gc4.getMember();
System.out.println(person);
5. 제네릭 타입을 지정하지 않을 경우
GenericClass gc5 = new GenericClass();
// => 타입 T 가 모두 Object 타입으로 대체됨
// 즉, 다시 모든 데이터를 다룰 수 있게 됨
gc5.setMember(1);
gc5.setMember(3.14);
gc5.setMember("홍길동");
gc5.setMember(new Person("이순신", 44));
// => Object 타입 미지정과 지정의 기능상의 차이는 없으나
// 제네릭 타입 자체를 생략할 경우 경고메세지가 표시되므로 제네릭 사용 추천
GenericClass<Object> gc6 = new GenericClass<Object>(); // 경고메세지 미표시됨
// ===========================================================
// 실제 제네릭을 적용하여 정의된 Collection AIP 예시
List<String> list = new ArrayList<String>();
// => 컬렉션 요소로 사용되는 데이터가 String 타입으로 고정됨
Set<Integer> set = new HashSet<Integer>();
// => 컬렉션 요소로 사용되는 데이터가 Integer 타입으로 고정됨
Map<Integer, String> map = new HashMap<Integer, String>();
// => 컬렉션 요소 중 키는 Integer, 값은 String 타입으로 고정됨
'JAVA' 카테고리의 다른 글
[JAVA] 익명(anonymous) 객체 (1) (1) | 2023.11.14 |
---|---|
[JAVA] 제네릭(Generic, 일반화) - 2 (1) | 2023.10.31 |
[JAVA] enum type (2) (0) | 2023.10.31 |
[JAVA] enum type (1) (1) | 2023.10.31 |
[JAVA] 날짜 및 시각 정보에 대한 형식화(Formatting) (0) | 2023.10.25 |