13.1 제네릭이란?

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

public class Box{
	public Object content;
}

Object 타입은 모든 클래스의 최상위 부모 클래스이므로 모든 객체는 부모 타입인 Object로 자동 타입 변환 되기에 content 필드에는 어떤 객체든 대입이 가능

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

문제는 Box 안의 내용물을 얻을 때 발생. contentObject 타입이므로 어떤 객체가 대입되어 있는지 확실하지 않음 → 만약 타입을 안다면 강제 타입 변환을 거쳐 얻을 수 있음.

String content = (String) box.content;

만약 어떤 내용물이 저장되어 있는지 모른다면 instanceof 연산자로 타입을 조사할 수 있지만 모든 종류의 클래스를 대상으로 조사할 수는 없음. → Object 타입으로 content 필드를 선언하는 것은 좋은 방법이 아님. → 제네릭사용

제네릭 (Generic)

: 결정되지 않은 타입을 파라미터로 처리하고 실제 사용할 때 파라미터를 구체적인 타입으로 대체시키는 기능

Box 클래스에서 결정되지 않은 content의 타입을 T라는 타입 파라미터로 정의

public class Box <T>{
	public T content;
}

<T>T가 타입 파라미터임을 뜻하는 기호로, 타입이 필요한 자리에 T를 사용할 수 있음을 알려주는 역할.

만약 Box의 내용물로 100을 저장하고 싶다면 Box를 생성할 때 타입 파라미터 T대신 Integer로 대체