제너릭(Generic)이란?
제너릭은 타입 매개변수를 통해 다양한 타입에 대한 유연한 대처를 가능하게 한다.
List에서 <>부분에 타입 매개변수(Type parameter)를 지정한다.
<>에 타입 매개변수를 선언하는 것을 매개변수화 타입(Parmeterized type)을 정의한다고 한다.
제너릭을 사용하면 변수 타입을 명확히 표현할 수 있다는 장점과 반복되는 코드를 줄일 수 있다는 장점이 있다
타입 매개변수
매개변수는 클래스 생성 시 생성자에서 사용하거나 함수 호출 시 인자 값을 전달하기 위해 사용한다. 타입 매개변수는 말 그대로 전달하는 것이 인자 값이 아니라 타입이라고 생각하면 된다.
예) List<String> colors = List();
colors.add('Red');
위 경우는 List에서 타입 매개변수를 <String>으로 지정한 것이다. 이것은 해당 List에 String타입으로 넘겨준 것을 의미한다. 따라서 해당 List에는 String타입의 값만 넣을 수 있다. 하지만 List 생성 시 타입 매개변수를 다른 타입으로 줄 수도 있다
예) List<int> numbers= List();
numbers.add(1);
위 경우는 타입 매개변수를 int로 지정하면 int 타입 값만 넣을 수 있는 List가 생성된다. 이런 식으로 매개변수에 값을 넘겨주듯이 타입을 넘겨줄 수 있는 것이 제네릭의 핵심이다.
String과 int를 다루는 List를 각각 생성한다고 가정하면 add()메서드만 2개가 필요하다. 다른 메서드들까지 고려하면 그 수가 아주 많아진다. 그러나 제네릭을 사용하면 단 하나의 코드로 다양한 타입에 대한 커버가 가능하다.