Box
클래스 선언 → Box
는 다양한 내용물을 저장해야 하므로 특정 클래스 타입으로 선언할 수 없음 → Object
public class Box{
public Object content;
}
Object
타입은 모든 클래스의 최상위 부모 클래스이므로 모든 객체는 부모 타입인 Object
로 자동 타입 변환 되기에 content
필드에는 어떤 객체든 대입이 가능
Box box = new Box();
box.content = "모든 객체";
문제는 Box
안의 내용물을 얻을 때 발생. content
는 Object
타입이므로 어떤 객체가 대입되어 있는지 확실하지 않음 → 만약 타입을 안다면 강제 타입 변환을 거쳐 얻을 수 있음.
String content = (String) box.content;
만약 어떤 내용물이 저장되어 있는지 모른다면 instanceof
연산자로 타입을 조사할 수 있지만 모든 종류의 클래스를 대상으로 조사할 수는 없음. → Object
타입으로 content
필드를 선언하는 것은 좋은 방법이 아님. → 제네릭사용
: 결정되지 않은 타입을 파라미터로 처리하고 실제 사용할 때 파라미터를 구체적인 타입으로 대체시키는 기능
Box
클래스에서 결정되지 않은 content
의 타입을 T
라는 타입 파라미터로 정의
public class Box <T>{
public T content;
}
→ <T>
는 T
가 타입 파라미터임을 뜻하는 기호로, 타입이 필요한 자리에 T
를 사용할 수 있음을 알려주는 역할.
만약 Box
의 내용물로 100
을 저장하고 싶다면 Box
를 생성할 때 타입 파라미터 T
대신 Integer
로 대체