Kim Hyeong
14 Generic 본문
************************
다시 공부할 필요가 있음
************************
Generic
- 클래스내부에서 사용할 데이터 타입을 외부에서 지정하는 방법
ex) class Demo<T>{ //T = 데이터 type
public T data;
}
//메인
Demo<String> d1 = new Demo<String>(); //String 이라는 인자가 T로 들어감
Demo<Integer> d2 = new Demo<Integer>();
jdk 1.5ver
사용 이유 : 타입의 안전성 제공 타입체크 형변환 생략가능 코드 간결
실행
class GenericDemo <T>{
public T data;
public void setData(T data){
this.data = data;
}
public T getData() {
return data;
}
}
public class GenericDemo1 {
public static void main(String[] args) {
GenericDemo<Integer> gd = new GenericDemo<Integer>();
gd.setData(new Integer(200));
System.out.println("gd = "+gd.getData());
GenericDemo<String> gd1 = new GenericDemo<String>();
gd1.setData("하이자바");
System.out.println("gd1 = "+gd1.getData());
}
}
실행결과
gd = 200
gd1 = 하이자바
인스턴스를 생성을 할 때 들어오는 각각의 데이터 타입을 가지고 맘대로 지정을 해서 형성이 가능하다.
그래서 형변환이 필요 없이 객체를 생성할 때 각각의 데이터 타입을 지정을 해서 다양하게 만들 수 있다. 클래스에 데이터 타입을 지정을 할 때 엄격해져서 타입의 안정성이 올라가고 코드 또한 간결해진다.
복수개의 Genetic
class Person <T,E>{
public T data;
public E id;
Person(T data, E id){
this.data = data;
this.id = id;
}
}
public class GenericEx2 {
//A <T> a = new A <T> (new T(@@@));
public static void main(String[] args) { //A<T,T1> G = new A<T,T1>(new T(@@),new T1(##));
Person <StudentData, Integer> p2 =
new Person<StudentData, Integer>(
new StudentData("홍길동"), new Integer(20140002));
System.out.println(p1.data.name +": "+p1.id);
}
}
Generic 제한
데이타의 클래스로 제한 T라고 하는 타입은 Data의 자식클래스만 쓰게 제한
논리적인 오류를 막아주는 결과
컴파일 오류를 대비하기 위해 제한을 두는 것
'java 공부' 카테고리의 다른 글
15 Collections FrameWork (0) | 2018.08.10 |
---|---|
13 enum 클래스 (0) | 2018.08.10 |
12 wrapper 클래스 (0) | 2018.08.10 |
11 object Class (0) | 2018.08.10 |
10 예외처리 (0) | 2018.08.10 |