클래스를 정의할 때, 클래스 안에서 사용되는 자료형을 구체적으로 명시하지 않고

T와 같이 기호로 적어 놓는 것.

이렇게 만든 클래스는 동적 할당을 할때(new) 자료형을 사용자가 지정 가능하다

Box<String> box1 = new Box<>();

이 경우 <>안에 들어가는 자료형은 기본 자료형을 넣을 수 없고

String나 Integer와 같은 클래스형 데이터 타입만을 넣을 수 있다.

이와 비슷한 방식으로 Object를 이용하는 방법이 있다.

// Object를 이용
package ex13.example02;

class Box {
    static Object date;
}

public class GenericEx02 {
    public static void main(String[] args) {
        Box.date = 1;
        Box.date = "문자";
    }
}

위 방법은 Object가 자바의 모든 클래스의 부모이기 때문에 모든 자료형을 받을 수 있기 때문에

사용이 가능하다.

하지만 위와 같은 방법을 사용하면 static을 선언 하여야 하며, 그렇기에 동적할당을 할 수 없다.

또한, 선언한 클래스의 메소드를 사용하고자 한다면 따로 다운캐스팅을 하여야 사용 가능하다.

(Object에는 선언한 클래스의 메소드가 없기 때문)

이런 식으로 Object를 사용하여 선언하는것을 풀링기술 이라고 부른다

(static를 이용하여 메모리에 띄워두고 사용하는 것)