여기 아래 비슷한 기능을 하는 세 가지 클래스가 있다고 생각한다.
각각의 클래스는 Integer형, Double형, String형 변수를 출력하는 기능이다.
비슷한 기능을 하는 세 가지 클래스를 선언하는 건 상당히 불필요해보인다.
여기서 제네릭을 이용하면 아래와 같이 한개의 클래스로 만들 수 있다.
제네릭을 이용하면 어떤 타입이든 입력 받을 수 있다.
사용할 타입 입력한 후 Printer 객체를 선언하고, 메소드를 호출한다.
제네릭을 이용하면 또 장점이 하나 더 있는데
cats라는 Arraylist Object 타입을 선언했는데, Dog라는 객체를 넣었을 때 오류없이 작동한다. Object는 어떠한 객체든 추가 할 수 있기 때문이다. 이것은 안전하지 않다.
이때 제네릭을 이용하여 ArrayList에 Cat 객체타입으로 선언하면, cats에는 Cat 객체만 추가할 수 있어서 타입적으로 안전하다.
T,V 같이 제네릭은 2개 이상 변수 대입도 가능하다.
제네릭 타입의 변수도 Return 가능하다.