# Generic

자바에서 Generic은 결정되지 않은 타입을 파라미터로 처리하고

실제 사용할 때 파라미터를 구체적인 타입으로 대체 시키는 기능



```java
public Class Box {
    public  ? content // 
}
```

Box 클래스에 넣을 내용물로 content 라는 필드를 선언하려고 할 때, 타입을 무엇으로 해야 할까?

Box 는 다양한 내용물을 저장해야 하므로 특정 클래스 타입을 선언할 수 없다.

Object 타입은 모든 클래스의 최상위 부모 클래스이기 때문에 모든 객체는 Object 타입으로&#x20;

자동 타입 변환된다.  즉 content 필드에는 어떤 객체든 대입이 가능하다.



```java
public Class Box {
    public  Object content 
    
}

Box box = new Box();
box.content = 모든 객체;
```



하지만 Box 안의 내용물을 얻을 때에는 어떤 객체가 대입되어 있는지 확실하지 않다.&#x20;

예를 들어 String 타입이면 강제 타입 변환으로 String을 얻을 수 있다.

```java
String content = (String) box.content;
```

instanceof 연산자로 타입을 조사할 수 있지만 모든 종류의 클래스를 대상으로 조사할 수는 없다.

따라서 Object 타입으로 content를 선언하는 것은 좋은 방법이 아니다.&#x20;



Box 객체를 생성하기 전에 우리는 어떤 내용물을 넣을 지 알 수 있다.&#x20;



