필드의 자료형이 부정확한 경우 Java 자료형 대신 사용될 미지정 자료형의 식별자
Java 자료형(클래스, 인터페이스) 선언시 < > 기호에 제네릭 타입 작성
형식) public class 클래스명<제네릭, 제네릭, ...> { }
< > 기호에 클래스에서 사용할 수 있는 다수의 제네릭 타입을 [ , ] 기호로 구분하여 선언 가능
제네릭 타입의 식별자는 대문자로 작성하는 것을 권장
제네릭 타입 대신 사용될 Java 자료형을 상속 기능을 사용해 제한 가능
형식) public class 클래스명<제네릭 extends 부모클래스, ...> { }
제네릭 타입 대신 사용될 Java 자료형은 반드시 부모클래스를 상속받은 자식클래스로만 사용 가능
ex) public class Generic < T extends Number > { }
제네릭 타입 대신 사용될 Java 자료형을 전달해야만 필드 또는 메소드가 완성되어 클래스로 객체 생성 작성 가능
생성자의 제네릭 타입에는 Java 자료형 생략 가능
사용 방법
Generic< Integer > generic1 = new Generic<이 부분 생략 가능함>();
Generic< Integer > generic1 = new Generic< Integer >(); // T >> Integer
// public class Generic<T extends Number> {
public class Generic<T> {
private T field;
public Generic() {
}
public Generic(T field) {
this.field = field;
}
public T getField() {
return field;
}
public void setField(T field) {
this.field = field;
}
}
public class GenericApp {
public static void main(String[] args) {
// 제네릭 타입 대신 사용될 Java 자료형을 전달해야만 필드 또는 메소드 완성되어 클래스로 객체 생성 작성 가능
// => 생성자의 제네릭 타입에는 Java 자료형 전달 생략 가능
// => Generic<Integer> generic1 = new Generic<이 부분 생략 가능함>();
// Generic<Integer> generic1 = new Generic<Integer>(); // T >> Integer
Generic<Integer> generic1 = new Generic<>(); // T >> Integer
// 제네릭 타입 대신 설정된 클래스의 객체를 매개변수로 전달하여 필드값으로 저장
generic1.setField(100); // 필드에 Integer 객체를 전달하여 저장
// generic1.setField(12.34); // 필드에 Double 객체를 전달하면 에러 발생
Integer returnObject1 = generic1.getField();
// System.out.println("필드값 = " + returnObject1.intValue());
System.out.println("필드값 = " + returnObject1);
System.out.println("===================================");
Generic<Double> generic2 = new Generic<>(); // T >> Double
generic2.setField(12.34);
Double returnObject2 = generic2.getField();
System.out.println("필드값 = " + returnObject2);
System.out.println("===================================");
// Generic 클래스에서 Number가 상속된다면 String은 사용할 수 없음
// => Number클래스 안에 String은 상속받지 않기 때문에
// public class Generic<T extends Number> {
Generic<String> generic3 = new Generic<>(); // T >> String
generic3.setField("홍길동");
String returnObject3 = generic3.getField();
System.out.println("필드값 = " + returnObject3);
System.out.println("===================================");
}
}