gt1 = new GenericTest<>(); // 필기. 생성자 쪽은 다이아몬드 연산자만 주로 작성
GenericTest
package com.haenin.section01.generic;
public class Apllication {
public static void main(String[] args) {
/* 목표, 제네릭(generic)에 대해 이해할 수 있다. */
MyGenericTest mgt = new MyGenericTest(); // 필기. 구현의 편의성은 좋지만
mgt.setValue("Hello World!");
mgt.setValue(1);
mgt.setValue(3.14);
mgt.setValue(new java.util.Date());
// 필기. 타입 안정성이 좋지 않음
// 필기. 다운캐스팅 하면 다들어가서
// 필기. 런타임 exception이 일어날 수 있음
// String test =(String)mgt.getValue();
boolean idTrue = (boolean)mgt.getValue();
// 필기. 제네릭에서는 래퍼클래스를 넣어야함
// 필기. MemberDTO 같은 클래스도 가능
GenericTest<Double> gt1 = new GenericTest<>(); // 필기. 생성자 쪽은 다이아몬드 연산자만 주로 작성
GenericTest<String> gt2 = new GenericTest<String>();
// int test = gt1.value(); // 필기. 이제 타입을 더블형으로 명시했기 때문에 int불가능 오브젝트가 아니기 때문
// 필기. 타입이 명시적으로 되었기 때문에 타입안정성이 좋아짐
/* 설명.
* 1. 제네릭 클래스는 다양한 자료형으로 변할 수 있어 클래스 하나만으로 활용가치가 높아진다.(구현의 편의성)
* 2. 매개변수나 반환형도 제네릭 타입으로 지정되어 명확히 해당 타입에 대해 처리할 수 있다.(타입의 안정성)
* */
}
}
package com.haenin.section01.generic;
/* 설명.
* 제네릭 클래스와 다이아몬드 연산자(<>)에 들어갈 수 있는 4가지 타입
* 1. E: Element
* 2. T: Type
* 3. K: Key
* 4. V: Value
* */
public class GenericTest<T> {
private T value;
public GenericTest() {
}
public T getValue() {
return value;
}
public void setValue(T value) {
this.value = value;
}
}
package com.haenin.section01.generic;
public class MyGenericTest {
private Object value;
public MyGenericTest() {
}
public Object getValue() {
return value;
}
public void setValue(Object value) {
this.value = value;
}
}