이 중에서 오늘 다룰 내용은 제네릭 클래스이다. 제네릭 클래스의 인스턴스를 생성할 때 타입 매개변수로 전달받은 타입으로 데이터타입이 정해진다.
1 2 3 4 5 6 7 8 9
// 제니릭 클래스 선언 class 클래스명<타입 매개변수>{ }
// 제네릭 클래스 생성 new 클래스명<타입 인자>(new 타입매개변수());
// 제네릭 클래스 생성 - JDK7이후부터는 타입인자 생략 가능 new 클래스명<타입 인자>();
과일로 예시를 들어보자.
1 2 3 4 5 6 7 8 9 10 11 12
classFruitBox<T>{ T fruit; public FruitBox }
// 제네릭 클래스 생성 new FruitBox<Grape>(new Grape()); new FruitBox<Pear>(new Pear());
// 제네릭 클래스 생성 - JDK7이후부터는 타입인자 생략 가능 new FruitBox<>(new Grape()); new FruitBox<>(new Pear());
와일카드 vs 정규타입 매개변수 T차이
The difference is that if you have a type parameter U, you can use that type inside the method; if you use a wildcard, you don’t have access to the actual type inside the method (you only know that it is some unknown type that extends Number). If you need to know the actual type for whatever reason inside the method, then you cannot use the wildcard version. 출처: coderanch 블로그
와일드카드는 Object를 받기때문에 get메서드를 사용할 수 있지만 set, put메서드는 사용할 수 없다.